当我运行 Number(123456789012345.12).toFixed(3)
时,它以字符串形式返回 "123456789012345.125"
。最后一个5
(十进制)来自哪里?我本来期望它返回“123456789012345.120”
。我在配备 Intel 处理器的 Mac 上使用 Chrome 版本 68 执行了此代码。
最佳答案
您的数字太长(位数太多),不符合 JavaScript 数字的 64-bit floating point 精度。
下面是使用较少数字的示例:
Number(123456789012345.12).toFixed(3): '123456789012345.125'
Number(12345678901234.12).toFixed(3): '12345678901234.119'
Number(1234567890123.12).toFixed(3): '1234567890123.120'
Number(123456789012.12).toFixed(3): '123456789012.120'
Number(12345678901.12).toFixed(3): '12345678901.120'
JavaScript 数字由 64 位浮点值表示。
不可能使用普通的 JavaScript 数字来表示您显示的数字。您需要实现类似 bignumber.js 的东西。
如果使用 bignumber.js,那么您可以使用以下命令执行相同操作:
let BigNumber = require('bignumber.js');
BigNumber('123456789012345.12').toFixed(3): '123456789012345.120'
BigNumber('12345678901234.12').toFixed(3): '12345678901234.120'
BigNumber('1234567890123.12').toFixed(3): '1234567890123.120'
BigNumber('123456789012.12').toFixed(3): '123456789012.120'
关于javascript - 为什么 JavaScript 在解析数字的末尾添加一个额外的非零数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52087444/