[英]Print float with more decimal points [duplicate]
这个问题已经在这里有了答案:
当我尝试打印带有更多小数点的浮点数时,我遇到了一个非常奇怪的行为。
Float price = Float.valueOf("1602.72");
System.out.println(price); //prints 1602.72
outputValue = String.format("%.6f", price);
System.out.println(outputValue); //prints 1602.719971
我也用下面的代码,但得到相同的结果
DecimalFormat df = new DecimalFormat("0.000000");
System.out.println(df.format(price)); //prints 1602.719971
我期望outputValue为1602.720000
(十进制后的6位数字,带有额外的零)
float
是数字( 1 / 2 ^^ ? )
的二进制表示。
喜欢:
1/2^1 = 0.5,
1/2^2 = 0.25,
1/2^3 = 0.125,
1/2^4 = 0.0625, ...
通过添加该二进制数以找到最接近的匹配结果。
发生这种情况是因为浮点值对于十进制小数通常是不精确的 。
基本上,由于浮点数是使用2的负幂表示的,因此很难精确地表示一些十进制值(例如:您如何将0.3作为2的幂的和写出?)。
您可以尝试Float.valueOf("1602.720000")
或Double.valueOf("1602.72")
(更好),但是它们可能会有相同的问题。
请参阅此答案以获取更详细的说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.