Class FloatToDecimal
java.lang.Object
tools.jackson.core.io.schubfach.FloatToDecimal
This class exposes a method to render a
float as a string.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final intprivate final byte[]private static final intstatic final intstatic final intstatic final intstatic final intprivate intstatic final intstatic final intprivate static final intprivate static final longfinal intprivate static final intprivate static final intprivate static final intprivate static final intstatic final intprivate static final intprivate static final intstatic final intstatic final intprivate static final intprivate static final int -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidappend(int c) private voidappend8Digits(int m) private voidappendDigit(int d) private Stringprivate voidexponent(int e) private voidprivate static introp(long g, long cp) private inttoChars(int f, int e) private inttoChars1(int h, int l, int e) private inttoChars2(int h, int l, int e) private inttoChars3(int h, int l, int e) private inttoDecimal(float v) private inttoDecimal(int q, int c, int dk) private StringtoDecimalString(float v) static StringtoString(float v) Returns a string rendering of thefloatargument.private inty(int a)
-
Field Details
-
P
public static final int P- See Also:
-
W
private static final int W- See Also:
-
Q_MIN
public static final int Q_MIN- See Also:
-
Q_MAX
public static final int Q_MAX- See Also:
-
E_MIN
public static final int E_MIN- See Also:
-
E_MAX
public static final int E_MAX- See Also:
-
C_TINY
public static final int C_TINY- See Also:
-
K_MIN
public static final int K_MIN- See Also:
-
K_MAX
public static final int K_MAX- See Also:
-
H
public static final int H- See Also:
-
C_MIN
private static final int C_MIN- See Also:
-
BQ_MASK
private static final int BQ_MASK- See Also:
-
T_MASK
private static final int T_MASK- See Also:
-
MASK_32
private static final long MASK_32- See Also:
-
MASK_28
private static final int MASK_28- See Also:
-
NON_SPECIAL
private static final int NON_SPECIAL- See Also:
-
PLUS_ZERO
private static final int PLUS_ZERO- See Also:
-
MINUS_ZERO
private static final int MINUS_ZERO- See Also:
-
PLUS_INF
private static final int PLUS_INF- See Also:
-
MINUS_INF
private static final int MINUS_INF- See Also:
-
NAN
private static final int NAN- See Also:
-
MAX_CHARS
public final int MAX_CHARS- See Also:
-
bytes
private final byte[] bytes -
index
private int index
-
-
Constructor Details
-
FloatToDecimal
private FloatToDecimal()
-
-
Method Details
-
toString
Returns a string rendering of thefloatargument.The characters of the result are all drawn from the ASCII set.
- Any NaN, whether quiet or signaling, is rendered as
"NaN", regardless of the sign bit. - The infinities +∞ and -∞ are rendered as
"Infinity"and"-Infinity", respectively. - The positive and negative zeroes are rendered as
"0.0"and"-0.0", respectively. - A finite negative
vis rendered as the sign '-' followed by the rendering of the magnitude -v. - A finite positive
vis rendered in two stages:- Selection of a decimal: A well-defined
decimal d
vis selected to representv. - Formatting as a string: The decimal
d
vis formatted as a string, either in plain or in computerized scientific notation, depending on its value.
- Selection of a decimal: A well-defined
decimal d
A decimal is a number of the form d×10i for some (unique) integers d > 0 and i such that d is not a multiple of 10. These integers are the significand and the exponent, respectively, of the decimal. The length of the decimal is the (unique) integer n meeting 10n-1 ≤ d < 10n.
The decimal d
vfor a finite positivevis defined as follows:- Let R be the set of all decimals that round to
vaccording to the usual round-to-closest rule of IEEE 754 floating-point arithmetic. - Let m be the minimal length over all decimals in R.
- When m ≥ 2, let T be the set of all decimals in R with length m. Otherwise, let T be the set of all decimals in R with length 1 or 2.
- Define d
vas the decimal in T that is closest tov. Or if there are two such decimals in T, select the one with the even significand (there is exactly one).
The (uniquely) selected decimal d
vis then formatted.Let d, i and n be the significand, exponent and length of d
v, respectively. Further, let e = n + i - 1 and let d1…dn be the usual decimal expansion of the significand. Note that d1 ≠ 0 ≠ dn.- Case -3 ≤ e < 0:
d
vis formatted as0.0…0d1…dn, where there are exactly -(n + i) zeroes between the decimal point and d1. For example, 123 × 10-4 is formatted as0.0123. - Case 0 ≤ e < 7:
- Subcase i ≥ 0:
d
vis formatted as d1…dn0…0.0, where there are exactly i zeroes between dn and the decimal point. For example, 123 × 102 is formatted as12300.0. - Subcase i < 0:
d
vis formatted as d1…dn+i.dn+i+1…dn. There are exactly -i digits to the right of the decimal point. For example, 123 × 10-1 is formatted as12.3.
- Subcase i ≥ 0:
d
- Case e < -3 or e ≥ 7:
computerized scientific notation is used to format
d
v. Here e is formatted as byInteger.toString(int).- Subcase n = 1:
d
vis formatted as d1.0Ee. For example, 1 × 1023 is formatted as1.0E23. - Subcase n > 1:
d
vis formatted as d1.d2…dnEe. For example, 123 × 10-21 is formatted as1.23E-19.
- Subcase n = 1:
d
- Parameters:
v- thefloatto be rendered.- Returns:
- a string rendering of the argument.
- Any NaN, whether quiet or signaling, is rendered as
-
toDecimalString
-
toDecimal
private int toDecimal(float v) -
toDecimal
private int toDecimal(int q, int c, int dk) -
rop
private static int rop(long g, long cp) -
toChars
private int toChars(int f, int e) -
toChars1
private int toChars1(int h, int l, int e) -
toChars2
private int toChars2(int h, int l, int e) -
toChars3
private int toChars3(int h, int l, int e) -
append8Digits
private void append8Digits(int m) -
removeTrailingZeroes
private void removeTrailingZeroes() -
y
private int y(int a) -
exponent
private void exponent(int e) -
append
private void append(int c) -
appendDigit
private void appendDigit(int d) -
charsToString
-