parseFloat导致奇怪的计算



我有一个函数需要找到3个数字之间的差。它们可以作为字符串出现,所以我需要使用parseFloat并保留小数点后2位。当我使用带负数的parseFloat时,我会得到奇怪的差异。

// This will output -0.004999999999636212
let temp = -8985.69 - -8985.915 - 0.23
console.log(temp);
// But this will output -4.365674488582272e-13
let x = -8985.69
let y = -8985.915
let z = 0.23
let temp2 = parseFloat(x.toFixed(2)) - parseFloat(y.toFixed(2)) - parseFloat(z.toFixed(2))
console.log(temp2);

我查看了parseFloat文档,发现当遇到无效字符时,转换可能会发生更改。但我在这里没有看到任何错误的字符,我也不明白解析在任何时候停止都会导致它等于-4.365674488582272e-13

第二个数字有三个小数位,您将其设置为toFixed(2),因此它将其值更改为-8985.92。当我使用.toFixed(3)时,我会得到你想要的第一个结果。

y=-8985.915

y.toFixed(2(=&gt-8985.92

你需要阅读David Goldberg 1991年的论文,每个计算机科学家都应该知道什么浮点算术

访问这个网站:每个程序员都应该知道浮点运算,或者,为什么我的数字不加起来?

最新更新