Java中的浮点数据类型精度

Java中的浮点数据类型精度,java,floating-point,precision,Java,Floating Point,Precision,存储为单精度浮点数时,数字0.1的值为0.1000000149011919384765625(源代码:),但在Java中打印为0.1。我认为这是因为Java将浮点中的小数位数限制为7。如何增加显示的小数位数?您可以使用BigDecimal显示所有数字 float x = 0.1f; System.out.printf("%.17f", x); 0.10000000149011612 System.out.println(new BigDecimal(0.1f)); System.out.pr

存储为单精度浮点数时,数字0.1的值为0.1000000149011919384765625(源代码:),但在Java中打印为0.1。我认为这是因为Java将浮点中的小数位数限制为7。如何增加显示的小数位数?

您可以使用BigDecimal显示所有数字

float x = 0.1f;
System.out.printf("%.17f", x);

0.10000000149011612
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,因此没有表示错误,请注意BigDecimal不遵循IEEE-754@LppEdd数据类型本身不正确,但它可以正确地转换为双精度。