为什么下面的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
就足够了。