0

2 つの があり、有効数字BigDecimalに基づいてそれらが近いかどうかを判断したいと思います。

たとえば、次のことを考慮してください。

BigDecimal million = new BigDecimal(1_000_000);
BigDecimal tenmillion = new BigDecimal(10_000_000);

BigDecimal a = new BigDecimal("55.89").multiply(million);
BigDecimal b = new BigDecimal("55.88").multiply(million);
BigDecimal c = new BigDecimal("55.88").multiply(tenmillion);

生の数値では数千単位で区切られていても、有効桁数が 1 桁しか離れていないため、abが近い (そしてそうではない) と判断できるようにしたいと考えています。cこれを決定する最良の方法は何ですか?

たとえば、最下位桁を に置き換えることもできますが、それはそのままにして0しまうため、実際には正しい解決策ではありません。55.81 == 55.8955.89 != 55.90

4

1 に答える 1

1

範囲として使用する前に、許容する最大の差を取り、それを乗数で乗算します。

ここで役立つことを行うには、精度を知る必要があります。結局のところ、13450000 と 13450 を比較するとどうなるでしょうか。それらは非常に異なりますが、ゼロを取り除くだけで同じように見えます。両方の数値の有意差を見ると、1235000 と比較した 1234000 は true と言えますが、1234500 と 1235000 と比較した 1234500 は、実際には 2 番目のケースの差が小さいにもかかわらず、false となります。

ここでやるべきことは、% の違いを調べることでしょうか? つまり、ある数値を別の数値で割って、その結果がどれだけ 1 に近いかを調べます。

于 2013-12-26T09:33:00.197 に答える