相关疑难解决方法(0)

如果分数不能精确地用二进制表示,Double.toString()如何工作?

我无法理解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)

java floating-point bigdecimal

4
推荐指数
1
解决办法
56
查看次数

标签 统计

bigdecimal ×1

floating-point ×1

java ×1