相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

如果分数不能精确地用二进制表示,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
查看次数