我对下面的代码有疑问,如果我们使用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
答案 0 :(得分:1)
BigDecimal构造函数很简单。给我一个字符串,我将用它创建一个数字。如果你给我一个号码,我会直接使用他的价值。
由于示例中的String生成类似于8.5899346E9
,因此普通数字中的值为8589934600
。如果您发送浮动实例,它(我猜)将使用这些位来尽可能精确地重新创建值。