gho*_*932 4 java floating-point precision
当存储为单个精度浮点数时,数字0.1的值为0.100000001490116119384765625(来源:https ://www.h-schmidt.net/FloatConverter/IEEE754.html ),但在Java中将其打印为0.1。我认为这是因为Java将float中的小数位数限制为七个。如何增加显示的小数位数?
小智 5
float x = 0.1f;
System.out.printf("%.17f", x);
0.10000000149011612
Run Code Online (Sandbox Code Playgroud)
您可以使用 BigDecimal 显示所有数字。
System.out.println(new BigDecimal(0.1f));
System.out.println(new BigDecimal(0.1));
Run Code Online (Sandbox Code Playgroud)
这显示了精确的表示。float最多显示 24 位数字,double最多显示 53 位数字,因为这是尾数中的位数。
0.100000001490116119384765625
0.1000000000000000055511151231257827021181583404541015625
Run Code Online (Sandbox Code Playgroud)
这避免了需要计算出要显示多少位数字。
System.out.println(new BigDecimal(0.125f));
System.out.println(new BigDecimal(0.125));
Run Code Online (Sandbox Code Playgroud)
印刷
0.125
0.125
Run Code Online (Sandbox Code Playgroud)
因为这个值没有表示错误,因为它是 2^-3