src/share/classes/java/lang/Float.java

Print this page


   1 /*
   2  * Copyright 1994-2006 Sun Microsystems, Inc.  All Rights Reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Sun designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Sun in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  22  * CA 95054 USA or visit www.sun.com if you need additional information or


 348      * <dd>{@code P}
 349      * </dl>
 350      *
 351      * </blockquote>
 352      *
 353      * where <i>Sign</i>, <i>FloatingPointLiteral</i>,
 354      * <i>HexNumeral</i>, <i>HexDigits</i>, <i>SignedInteger</i> and
 355      * <i>FloatTypeSuffix</i> are as defined in the lexical structure
 356      * sections of the <a
 357      * href="http://java.sun.com/docs/books/jls/html/">Java Language
 358      * Specification</a>. If {@code s} does not have the form of
 359      * a <i>FloatValue</i>, then a {@code NumberFormatException}
 360      * is thrown. Otherwise, {@code s} is regarded as
 361      * representing an exact decimal value in the usual
 362      * "computerized scientific notation" or as an exact
 363      * hexadecimal value; this exact numerical value is then
 364      * conceptually converted to an "infinitely precise"
 365      * binary value that is then rounded to type {@code float}
 366      * by the usual round-to-nearest rule of IEEE 754 floating-point
 367      * arithmetic, which includes preserving the sign of a zero
 368      * value. Finally, a {@code Float} object representing this
 369      * {@code float} value is returned.
 370      *












 371      * <p>To interpret localized string representations of a
 372      * floating-point value, use subclasses of {@link
 373      * java.text.NumberFormat}.
 374      *
 375      * <p>Note that trailing format specifiers, specifiers that
 376      * determine the type of a floating-point literal
 377      * ({@code 1.0f} is a {@code float} value;
 378      * {@code 1.0d} is a {@code double} value), do
 379      * <em>not</em> influence the results of this method.  In other
 380      * words, the numerical value of the input string is converted
 381      * directly to the target floating-point type.  In general, the
 382      * two-step sequence of conversions, string to {@code double}
 383      * followed by {@code double} to {@code float}, is
 384      * <em>not</em> equivalent to converting a string directly to
 385      * {@code float}.  For example, if first converted to an
 386      * intermediate {@code double} and then to
 387      * {@code float}, the string<br>
 388      * {@code "1.00000017881393421514957253748434595763683319091796875001d"}<br>
 389      * results in the {@code float} value
 390      * {@code 1.0000002f}; if the string is converted directly to


   1 /*
   2  * Copyright 1994-2009 Sun Microsystems, Inc.  All Rights Reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Sun designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Sun in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  22  * CA 95054 USA or visit www.sun.com if you need additional information or


 348      * <dd>{@code P}
 349      * </dl>
 350      *
 351      * </blockquote>
 352      *
 353      * where <i>Sign</i>, <i>FloatingPointLiteral</i>,
 354      * <i>HexNumeral</i>, <i>HexDigits</i>, <i>SignedInteger</i> and
 355      * <i>FloatTypeSuffix</i> are as defined in the lexical structure
 356      * sections of the <a
 357      * href="http://java.sun.com/docs/books/jls/html/">Java Language
 358      * Specification</a>. If {@code s} does not have the form of
 359      * a <i>FloatValue</i>, then a {@code NumberFormatException}
 360      * is thrown. Otherwise, {@code s} is regarded as
 361      * representing an exact decimal value in the usual
 362      * "computerized scientific notation" or as an exact
 363      * hexadecimal value; this exact numerical value is then
 364      * conceptually converted to an "infinitely precise"
 365      * binary value that is then rounded to type {@code float}
 366      * by the usual round-to-nearest rule of IEEE 754 floating-point
 367      * arithmetic, which includes preserving the sign of a zero
 368      * value. 

 369      *
 370      * Note that the round-to-nearest rule also implies overflow and
 371      * underflow behaviour; if the exact value of {@code s} is large
 372      * enough in magnitude (greater than or equal to ({@link
 373      * #MAX_VALUE} + {@link Math#ulp(float) ulp(MAX_VALUE)}/2),
 374      * rounding to {@code float} will result in an infinity and if the
 375      * exact value of {@code s} is small enough in magnitude (less
 376      * than or equal to {@link #MIN_VALUE}/2), rounding to float will
 377      * result in a zero.
 378      *
 379      * Finally, after rounding a {@code Float} object representing
 380      * this {@code float} value is returned.
 381      *
 382      * <p>To interpret localized string representations of a
 383      * floating-point value, use subclasses of {@link
 384      * java.text.NumberFormat}.
 385      *
 386      * <p>Note that trailing format specifiers, specifiers that
 387      * determine the type of a floating-point literal
 388      * ({@code 1.0f} is a {@code float} value;
 389      * {@code 1.0d} is a {@code double} value), do
 390      * <em>not</em> influence the results of this method.  In other
 391      * words, the numerical value of the input string is converted
 392      * directly to the target floating-point type.  In general, the
 393      * two-step sequence of conversions, string to {@code double}
 394      * followed by {@code double} to {@code float}, is
 395      * <em>not</em> equivalent to converting a string directly to
 396      * {@code float}.  For example, if first converted to an
 397      * intermediate {@code double} and then to
 398      * {@code float}, the string<br>
 399      * {@code "1.00000017881393421514957253748434595763683319091796875001d"}<br>
 400      * results in the {@code float} value
 401      * {@code 1.0000002f}; if the string is converted directly to