gpt4 book ai didi

java - 为什么 Math.floor(1.23456789 * 1e8)/1e8) 返回 1.23456788

转载 作者:行者123 更新时间:2023-12-02 18:18:23 25 4
gpt4 key购买 nike

Math.floor(1.23456789 * 1e8) / 1e8)

返回:

1.23456788

考虑到这一点,这很奇怪:

Math.floor(1.23456789 * 1e9) / 1e9)

返回:

1.23456789

还有

Math.floor(1.23456799 * 1e8) / 1e8)

返回:

1.23456799

知道为什么会发生这种情况以及如何避免它吗?

最佳答案

正如 Daniel Centore 所回答的那样, double 值是不精确的。以下是 double 字的实际值(最多 20 位)的列表。显示的是 1.23456789 的两个最接近的编码;第一个更接近。乘以 1e8 时,乘法不会向上舍入。当乘以 1e9 时,乘法向上舍入为精确的整数值。

1.23456789     => 1.2345678899999998901 hex 3ff3c0ca4283de1b
1.23456789 => 1.2345678900000001121 hex 3ff3c0ca4283de1c
1.23456789*1e8 => 123456788.99999998510 hex 419d6f3453ffffff
1.23456789*1e9 => 1234567890.0000000000 hex 41d26580b4800000

关于java - 为什么 Math.floor(1.23456789 * 1e8)/1e8) 返回 1.23456788,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43880894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com