Javaで2つのdouble値が等しいかどうかを判断する方法
Javaでは、浮動小数点数はコンピュータで2進数として保存されているため、精度の問題から==演算子でdouble型が等しいかどうかを直接判定することはできません。代わりにDouble.compare()メソッドを使用するか、許容範囲を自分で定義して比較する必要があります。
- Double.compare
double a = 0.1 + 0.2;
double b = 0.3;
if (Double.compare(a, b) == 0) {
System.out.println("a和b相等");
} else {
System.out.println("a和b不相等");
}
- 任意の誤差範囲を設定して比較する:
double a = 0.1 + 0.2;
double b = 0.3;
double epsilon = 1e-10;
if (Math.abs(a - b) < epsilon) {
System.out.println("a和b相等");
} else {
System.out.println("a和b不相等");
}
この例では、ごくわずかな差の範囲 epsilon を定義し、2 つの double の差の絶対値がこの範囲よりも小さい場合にこれらを等しいと判断します。これは精度問題を解決できますが、適切な差の範囲を選択する必要があることに注意してください。