我无法理解Double.toString()在Java / JVM中的工作方式。我的理解是,一般而言,分数不能精确地用Double和Float等浮点类型表示。例如,206.64的二进制表示形式是206.6399999999999863575794734060764312744140625。那么,为什么(206.64).toString()返回“ 206.64”而不是“ 206.6399999999999863575794734060764312744140625”?
Kotlin中的测试代码。
@Test
fun testBigDecimalToString() {
val value = 206.64
val expected = "206.64"
val bigDecimal = BigDecimal(value)
assertEquals(expected, value.toString()) // success
assertEquals(expected, bigDecimal.toString()) // failed. Actual: 206.6399999999999863575794734060764312744140625
}
Run Code Online (Sandbox Code Playgroud)