当我运行Number(123456789012345.12).toFixed(3)
时,它以字符串形式返回"123456789012345.125"
。最后5个(十进制)从哪里来?我本来希望它返回"123456789012345.120"
。我在Mac上使用Chrome 68版本的Intel处理器在Mac上执行了此代码。
答案 0 :(得分:1)
您的号码太长(位数太多),不符合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'