为什么当 parseFloat 用于小数点后 15 位时,JS 会降低数字?
Why does JS floors down the number when parseFloat is used with 15 decimal places?
我试图将一个字符串解析为具有 15 位小数和 14 位小数的浮点数。下面是控制台输出
parseFloat('99.000000000000001')
//99
parseFloat('99.00000000000001')
//99.00000000000001
为什么去掉一位小数会造成这种差异?
好吧,Javascript 可以处理的数字有一点限制(直到我们获得 BigInt64 或如果您使用像 decimal.js 这样的库)。因此,由于它无法处理更多的小数,所以它只是在一个点处截断。如果你想做一个更大的数字,你会看到更少的小数。如果这导致数字 "exacly" 99 在你的情况下 javascript 将正确显示为 99 而不是 99.00000000000 因为我们只有 Number 而不是 float,decimal,int 等
parseFloat(1234567.123456789);
// 1234567.123456789
parseFloat(12345678.123456789);
// 12345678.12345679
parseFloat(123456789.123456789);
// 123456789.12345679
parseFloat(1234567891.123456789);
// 1234567891.1234567
parseFloat(12345678912.123456789);
// 12345678912.123457
parseFloat(123456789123.123456789);
// 123456789123.12346
编辑:实际上它似乎是圆形而不是下降。
我希望能解释清楚。
我试图将一个字符串解析为具有 15 位小数和 14 位小数的浮点数。下面是控制台输出
parseFloat('99.000000000000001')
//99
parseFloat('99.00000000000001')
//99.00000000000001
为什么去掉一位小数会造成这种差异?
好吧,Javascript 可以处理的数字有一点限制(直到我们获得 BigInt64 或如果您使用像 decimal.js 这样的库)。因此,由于它无法处理更多的小数,所以它只是在一个点处截断。如果你想做一个更大的数字,你会看到更少的小数。如果这导致数字 "exacly" 99 在你的情况下 javascript 将正确显示为 99 而不是 99.00000000000 因为我们只有 Number 而不是 float,decimal,int 等
parseFloat(1234567.123456789);
// 1234567.123456789
parseFloat(12345678.123456789);
// 12345678.12345679
parseFloat(123456789.123456789);
// 123456789.12345679
parseFloat(1234567891.123456789);
// 1234567891.1234567
parseFloat(12345678912.123456789);
// 12345678912.123457
parseFloat(123456789123.123456789);
// 123456789123.12346
编辑:实际上它似乎是圆形而不是下降。
我希望能解释清楚。