当下面的数字转换为字符串,然后在小数点处拆分时,表示小数部分的字符串是不正确的。预期值为 0123456789,但控制台中显示的值为 01234567。
const number = 123456789.0123456789;
console.log(number.toString().split("."));
Run Code Online (Sandbox Code Playgroud)
如果小数点左边的位数发生变化,那么在控制台中显示的小数部分也会发生变化,但对于我迄今为止所做的测试,不超过 8 个字符。为什么会这样?我怎样才能让它显示小数点后面的真实数字串?
编辑 -
经过一些反复试验后,这里有一些额外的发现 -
当number = 2097151.0123456789小数部分正确时。
当number = 2097152.0123456789小数部分不正确时。
小智 0
js 中 float 的二进制表示由 64 位组成,遵循国际 IEEE 754 标准:
\n数字 f 存储为 f = s \xc2\xb7 m \xc2\xb7 2^e,其中 s 为 1 或 \xe2\x88\x921。
\n由于二进制系统中的表示形式,如果浮点数在十进制系统中是有限的(例如 12,45),但在二进制系统中是周期性的(例如 1100,01110011001100110011001100...),则可能会出现问题。
\n由于空间有限,数字会四舍五入。有时,当重新转换为十进制系统时,这种舍入可能会被恢复;然而,在某些情况下,由于精度不够(即另一个数字具有相同的表示),这是不可能的。
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |