Some sun.misc internal APIs are deprectaed in JDK 9 and will be encapsulated or removed in a future release.
sun.misc.FloatingDecimal.toJavaFormatString(float)
dtoa( binExp, fractBits, nSignificantBits );
public String toJavaFormatString() { char result[] = (char[])(perThreadBuffer.get()); int i = getChars(result); return new String(result, 0, i); }
nFractBits = countBits( fractBits ); nTinyBits = Math.max( 0, nFractBits - binExp - 1 ); if ( binExp <= maxSmallBinExp && binExp >= minSmallBinExp ){ fractBits >>>= (expShift-binExp) ; developLongDigits( 0, fractBits, halfULP ); return; Bval = multPow52( new FDBigInt( fractBits ), B5, B2 ); Sval = constructPow52( S5, S2 ); Mval = constructPow52( M5, M2 ); if ( (digits[nDigits-1]&1) != 0 ) roundup(); } else if ( lowDigitDifference > 0 ){ roundup(); roundup();
Matcher m = getHexFloatPattern().matcher(s); boolean validInput = m.matches(); significandString = stripLeadingZeros(group4); leftDigits = significandString.length(); String group6 = stripLeadingZeros(m.group(6)); leftDigits = group6.length(); significandString = stripLeadingZeros(significandString); signifLength = significandString.length(); return new FloatingDecimal(sign * 0.0); return new FloatingDecimal(sign * (positiveExponent ? Double.POSITIVE_INFINITY : 0.0)); long leadingDigit = getHexDigit(significandString, 0); i < signifLength && nextShift >= 0; i++) { long currentDigit = getHexDigit(significandString, i); significand |= (currentDigit << nextShift); nextShift-=4; long currentDigit = getHexDigit(significandString, i); currentDigit = getHexDigit(significandString,i); sticky = sticky || (currentDigit != 0);
FDBigInt bigB = doubleToBigInt( dValue ); Ulp2 -= common2; bigB = multPow52( bigB, B5, B2 ); FDBigInt bigD = multPow52( new FDBigInt( bigD0 ), D5, D2 ); FDBigInt halfUlp = constructPow52( B5, Ulp2 ); if ( (cmpResult = diff.cmp( halfUlp ) ) < 0 ){ dValue += 0.5*ulp( dValue, overvalue ); dValue += ulp( dValue, overvalue ); if ( dValue == 0.0 || dValue == Double.POSITIVE_INFINITY ) break correctionLoop; // oops. Fell off end of range.
double dValue = doubleValue(); return stickyRound( dValue );
return (potentialNaN ? new FloatingDecimal(Double.NaN) // NaN has no sign : new FloatingDecimal(isNegative? Double.NEGATIVE_INFINITY: Double.POSITIVE_INFINITY)) ; char ch = in.charAt(i+1); if (ch == 'x' || ch == 'X' ) // possible hex string return parseHexString(in); return new FloatingDecimal( isNegative, decExp, digits, nDigits, false ); } catch ( StringIndexOutOfBoundsException e ){ } throw new NumberFormatException("For input string: \"" + in + "\"");
private static FDBigInt constructPow52( int p5, int p2 ){ FDBigInt v = new FDBigInt( big5pow( p5 ) ); if ( p2 != 0 ){ v.lshiftMe( p2 ); } return v; }
private FDBigInt doubleToBigInt( double dval ){ long lbits = Double.doubleToLongBits( dval ) & ~signMask; int binexp = (int)(lbits >>> expShift); lbits &= fractMask; if ( binexp > 0 ){ lbits |= fractHOB; } else { assert lbits != 0L : lbits; // doubleToBigInt(0.0) binexp +=1; while ( (lbits & fractHOB ) == 0L){ lbits <<= 1; binexp -= 1; } } binexp -= expBias; int nbits = countBits( lbits ); /* * We now know where the high-order 1 bit is, * and we know how many there are. */ int lowOrderZeros = expShift+1-nbits; lbits >>>= lowOrderZeros; bigIntExp = binexp+1-nbits; bigIntNBits = nbits; return new FDBigInt( lbits ); }
private static FDBigInt multPow52( FDBigInt v, int p5, int p2 ){ if ( p5 != 0 ){ if ( p5 < small5pow.length ){ v = v.mult( small5pow[p5] ); } else { v = v.mult( big5pow( p5 ) ); } } if ( p2 != 0 ){ v.lshiftMe( p2 ); } return v; }
@NotNull @Override public String getPlaceholderText() { return number instanceof Float ? toJavaFormatString(number.floatValue()) + "f": number instanceof Double ? toJavaFormatString(number.doubleValue()) : number.toString(); } });
public void appendTo(Appendable buf) { char result[] = (char[])(perThreadBuffer.get()); int i = getChars(result); if (buf instanceof StringBuilder) ((StringBuilder) buf).append(result, 0, i); else if (buf instanceof StringBuffer) ((StringBuffer) buf).append(result, 0, i); else assert false; }
dtoa( binExp, ((long)fractBits)<<(expShift-singleExpShift), nSignificantBits );