###、###。##の形式を使用して1つのBIgDecimalを生成すると、結果は660,000.00になります。次に、それをaに対して同一マップしようとしnew BigDecimal(660000.00)
ますが、毎回falseが返されます。不変の値を、それらが作成された初期形式と比較する方法はありますか?
質問する
251 次
1 に答える
2
これは、2つのスケールBigDecimals
が異なるためです。
System.out.println(new BigDecimal("660000.00").scale()); // 2
System.out.println(new BigDecimal(660000.00).scale()); // 0
規模に関係なくそれらを比較するには、次のようにします。
BigDecimal bd1 = new BigDecimal("660000.00");
BigDecimal bd2 = new BigDecimal(660000.00);
int s = Math.max(bd1.scale(), bd2.scale());
.. bd1.setScale(s).equals(bd2.setScale(s)) .. // == true.
補足:たとえば、二重リテラル.1
は実際の値.1を表すのではなく、その近似値を表すことに注意してください。(これは、浮動小数点表現の不正確さによるものです。)これは、次のようにすることで確認できます。
System.out.println(new BigDecimal(.1));
0.1000000000000000055511151231257827021181583404541015625を出力します
ただし、new BigDecimal(".1")
実際には正確に.1を表しているため、
new BigDecimal(.1).equals(new BigDecimal(".1"))
は偽です。
于 2012-08-23T09:18:33.557 に答える