以单个精度浮点数存储时,数字0.1的值为0.100000001490116119384765625(源:https://www.h-schmidt.net/FloatConverter/IEEE754.html),但在Java中将其打印为0.1。我认为这是因为Java将float中的小数位数限制为七个。如何增加显示的小数位数?
答案 0 :(得分:5)
float x = 0.1f;
System.out.printf("%.17f", x);
0.10000000149011612
答案 1 :(得分:3)
您可以使用BigDecimal显示所有数字。
System.out.println(new BigDecimal(0.1f));
System.out.println(new BigDecimal(0.1));
这显示了精确的表示。 float
最多可显示24位数字,而double
最多可显示53位数字,这是尾数的位数。
0.100000001490116119384765625
0.1000000000000000055511151231257827021181583404541015625
这避免了需要计算要显示的位数的情况。
System.out.println(new BigDecimal(0.125f));
System.out.println(new BigDecimal(0.125));
打印
0.125
0.125
因为该值为2 ^ -3
,所以没有表示错误