2016-09-21 50 views
2

我有一个关于下面的代码的问题,如果我们使用Float.toString()的方法,它会做一些舍入的数字。它为什么这样做?这背后有什么具体的逻辑吗?为什么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

将Float更改为Double。我只能猜测,尾数部分大于Float的精度。 –

+1

只是因为Float.toString返回这个:8.5899346E9所以BigDecimal只能使用剩下的东西 – AxelH

+0

是的,它看起来像是在浮动的toString实现中选择的精度, –

回答

1

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

由于您的示例中生成的字符串看起来像8.5899346E9,因此普通数字中的值为8589934600。如果你发送的是浮点实例,它将(我猜)与这些位一起工作以尽可能精确地重新创建值。

相关问题