Java中的float数据类型精度

时间:2019-03-11 19:07:16

标签: java floating-point precision

以单个精度浮点数存储时,数字0.1的值为0.100000001490116119384765625(源:https://www.h-schmidt.net/FloatConverter/IEEE754.html),但在Java中将其打印为0.1。我认为这是因为Java将float中的小数位数限制为七个。如何增加显示的小数位数?

2 个答案:

答案 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

,所以没有表示错误