为什么Float.toString()会更改数值?

时间:2016-09-21 07:17:53

标签: java

我对下面的代码有疑问,如果我们使用Float.toString()方法,它会进行一些数字舍入。为什么这样做?那背后有什么特定的逻辑吗?

我还查看了Float.toString()的内部代码。它正在调用FloatingDecimal(f).toJavaFormatString()

public static void main(String[] args) {                            
    Float f = Float.intBitsToFloat(1342177280);

    String simpleString = new BigDecimal(f).toPlainString();
    System.out.println("simpleString value  " + simpleString);

    String withToString = new BigDecimal(Float.toString(f)).toPlainString();
    System.out.println("withToString value  " + withToString);
}

输出就像这样

simpleString value  8589934592
withToString value  8589934600  //here value changed

1 个答案:

答案 0 :(得分:1)

BigDecimal构造函数很简单。给我一个字符串,我将用它创建一个数字。如果你给我一个号码,我会直接使用他的价值。

由于示例中的String生成类似于8.5899346E9,因此普通数字中的值为8589934600。如果您发送浮动实例,它(我猜)将使用这些位来尽可能精确地重新创建值。