Java中浮点数精度问题

Java中浮点数精度问题

Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。如下图所示:

public class DataRange{
    public static void main(String[] args) {
        float number_1 = 0.04f + 0.06f;   // 创建数据1
        float number_2 = 0.1f;            // 以同样的值创建数据2
        System.out.println(number_1==number_2);    // 判断两个数据是否相等
        System.out.println("number_1的值为" + number_1);  // 输出数据1的值
        System.out.println("number_2的值为" + number_2);  // 输出数据2的值
    }
}

  以上代码按常理理解应该是number_1与number_2的值相同才对,但是看以下输出并不是这样:

    

 

可以看到两者的值并不相等;因为浮点数在java中是不精确的,比如double d=2.01,你打印出来也是2.01,但是实际上java虚拟机存储的是2.010000000001这个数,java的浮点数不能存储精确的小数点

 

所以我们应该

最好完全避免使用浮点数进行比较

最好完全避免使用浮点数进行比较

 

当然在java中也有解决此问题的方案:数学工具类 BigDecimal

 

posted @ 2021-02-09 21:42  MieDidXiang  阅读(174)  评论(0)    收藏  举报