java 小数如何比较
比较 Java 中的小数
在 Java 中比较小数(浮点数)时,直接使用 == 运算符可能会导致精度问题。由于浮点数的存储方式,即使数学上相等的两个小数,在计算机中可能以不同的二进制形式存储。因此,推荐使用以下方法进行比较:
使用误差范围(Epsilon)比较
定义一个极小的误差范围(如 1e-9),若两个小数的差值在该范围内,则认为它们相等。
double a = 0.1 + 0.2;
double b = 0.3;
double epsilon = 1e-9;
if (Math.abs(a - b) < epsilon) {
System.out.println("a 和 b 相等");
} else {
System.out.println("a 和 b 不相等");
}
使用 BigDecimal 类
BigDecimal 提供了高精度的十进制运算,适合需要精确比较的场景。使用 compareTo 方法进行比较:

import java.math.BigDecimal;
BigDecimal num1 = new BigDecimal("0.1").add(new BigDecimal("0.2"));
BigDecimal num2 = new BigDecimal("0.3");
if (num1.compareTo(num2) == 0) {
System.out.println("num1 和 num2 相等");
} else {
System.out.println("num1 和 num2 不相等");
}
注意事项
- 避免直接使用
==比较浮点数,尤其是经过运算后的结果。 BigDecimal的字符串构造函数(如new BigDecimal("0.1"))能确保精度,而直接传入double值(如new BigDecimal(0.1))可能引入精度问题。- 对于简单比较,误差范围法更高效;对于金融等需要高精度的场景,优先选择
BigDecimal。






