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

浙公网安备 33010602011771号