有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java逗号双数乘法

为什么这个java代码返回61.004999999999995而不是61,005??我不明白

System.out.println(105*0.581); 

共 (2) 个答案

  1. # 1 楼答案

    它的出现是由于浮点数的性质。计算机处理浮点数的智能不是很强,所以我们必须基于近似值来工作。 而不是6.005==6.004999,你应该这样做:6.005-6.004999<;=0.001

  2. # 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