-1

私は最近 1 つのアルゴリズムに取り組んでいましたが、たとえば 2 つの Java BigDecimals があり、それらの値が -1.9997 と -1.9989 であるという点でつまずきました。BigDecimal の compareTo メソッドは -1.9989 が -1.9997 より大きいと見なします。等しいと見なされますが、たとえば -1.9 と -1.86 がある場合、それらは異なると見なされます。Javaでそれを行う方法はありますか?

4

2 に答える 2

4

値の差を取り、それがしきい値/エラーよりも小さいことを確認します。

double x = -1.9997;
double y = -1.9989;
if(Math.abs(x - y) < 1e-3) // almost the same

個人的には、double15 桁以上の精度が必要でない限り使用します。

于 2012-04-17T07:02:48.807 に答える
3

次に、それらを比較する前に数値を四捨五入する必要があります。デフォルトの比較は非常に合理的です。

BigDecimal price = x.scale(2, RoundingMode.HALF_UP);

このコードは、小数点以下 2 桁に丸められます。

于 2012-04-17T07:01:05.127 に答える