blog.bouzuya.net

2019-10-12 java.math.BigDecimal の equals の挙動

おそらく java.math.BigDecimal は scale が違っていると equals が false を返す。たとえば 0 と 0.0 は違うものになる。 stripTrailingZeros で末尾の zero を消して scale を揃えると equals true になる。分かりにくいバグになりそうだけど Java 界隈のひとたちはどうしているのだろう。そもこれを使わないのか。

// Kotlin
assertEquals("0", 0.toBigDecimal().toString())
assertEquals("0", 0.toBigDecimal().toPlainString())
assertEquals("0.0", 0.0.toBigDecimal().toString())
assertEquals("0.0", 0.0.toBigDecimal().toPlainString())
assertNotEquals(0.toBigDecimal(), 0.0.toBigDecimal())
assertEquals("0", 0.0.toBigDecimal().stripTrailingZeros().toString())
assertEquals("0", 0.0.toBigDecimal().stripTrailingZeros().toPlainString())
assertEquals(0.toBigDecimal(), 0.0.toBigDecimal().stripTrailingZeros())
assertEquals(0.toBigDecimal().stripTrailingZeros(), 0.0.toBigDecimal().stripTrailingZeros())

assertEquals("100", 100.toBigDecimal().toString())
assertEquals("100", 100.toBigDecimal().toPlainString())
assertEquals("1E+2", 100.toBigDecimal().stripTrailingZeros().toString())
assertEquals("100", 100.toBigDecimal().stripTrailingZeros().toPlainString())
assertNotEquals(100.toBigDecimal(), 100.toBigDecimal().stripTrailingZeros())
assertEquals(100.toBigDecimal().stripTrailingZeros(), 100.toBigDecimal().stripTrailingZeros())

Oxygen Not Included 750 サイクルで打ち切って次の基地へ。打ち上げはできたがクリアはならなかった。 3 人基地は楽しかった。

今回は Rime で開始。目標は "Home Sweet Home" 。 12 人基地でモニュメントを目指す。