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を使うべきです。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント