为什么下面的Java代码打印相同的float变量的不同值(小数部分)?

public static void main(String[] args) {
    float f = 2001797.11f;
    System.out.println(String.format("%013.2f", f));
    System.out.println(Float.toString(f));
    System.out.println(String.format("%018.5f", f));
}

输出:
0002001797.13
2001797.1
000002001797.12500

最佳答案

混乱源于float f = 2001797.11f;行。与数学值float最接近的"2001797.11"实际上是2001797.125。您可以这样做

System.out.println(new BigDecimal(2001797.11f));

因此,f实际上是2001797.125,并且String.format的2种用法已正确舍入。

那么,为什么Float.toString(f)不产生"2001797.125"呢?这是因为Float.toString仅显示足够的小数位,以便将值与其他float区分开。在这种情况下,仅在小数点后显示1就足够了。

10-06 03:31