为什么这个java代码返回61.004999999999995
而不是61,005
?我不明白。
System.out.println(105*0.581);
答案 0 :(得分:2)
由于浮点数的性质而发生。计算机使用浮点数不是很聪明,所以我们必须根据近似值进行工作。 而不是6.005 == 6.004999,你应该这样做:6.005 - 6.004999< = 0.001
答案 1 :(得分:2)
你陷入浮点精度问题。在计算机科学中,有一个简单(但是有趣)的事实:你不能代表所有实数。 Java也是如此。
如果您想深入了解,可以研究浮点数如何存储在内存中。关键词是:符号位;尾数和指数。请注意,精度还取决于系统内存(32或64) http://en.wikipedia.org/wiki/Single-precision_floating-point_format
Java说,为了更精确,你可以使用BigDecimal:
System.out.println(new BigDecimal(105).multiply(new BigDecimal(0.581));
您还可以使用round(MathContext mc)对其进行舍入,如果将精度设置为5,则在这种情况下将为您提供61.005。
System.out.println(new BigDecimal(105).multiply(new BigDecimal(0.581)).round(new MathContext(5)));
https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html
如果只是关于如何显示它和精确度的问题,你可以使用DecimalFormat。
System.out.println(new DecimalFormat("###.###").format(105*0.581));
https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html