JavaのBigDecimalの比較とstripTrailingZerosメソッドと指数表記

JavaのBigDecimalの比較とstripTrailingZerosメソッドと指数表記

JavaのBigDecimal型の比較はcompareToでします。

例えば100.0と100はcompareToで比較するとtrueです。

また100.0と指数表記の1E+2もcompareToで比較するとtrueです。

Objects.eualsを使うと100.0と100はfalseですし、100.0と1E+2もfalseになります。

今回再認識したのはBigDecimalの比較はやっぱりcompareToで行うということです。

BigDecimalのstripTrailingZerosメソッドを使用すると指数表記になるときがあります。

このメソッドは小数点以下の0を省いてくれます。

100.00100 → 100.001
100.000 → 1E+2 // 但し、小数点以下がALL0の場合、指数表記になってしまう(Java7,8で確認)

こういう予期せぬこともありうるためObjects.equalsでBigDecimalを比較するのではなく、BigDecimalの比較はcompareToを使うべきです。

コメント

タイトルとURLをコピーしました