为什么Firebase计算此方程的方式与计算器不同?

问题描述 投票:0回答:1

如果我在Firebase函数中执行此等式(在JavaScript中:)

var q = 0.1
var alpha = 0.1
var gamma = 0.99
var max5 = 0

q = (1 - alpha) * q + (alpha * (-1 + (gamma * max5)));

console.log(q)

结果是-0.009999999999999995

但是如果我在计算器上执行此方程,则为-0.01

我应该注意,我粘贴了上面代码的简化版本,但是所有变量都获得了parseFloat操作,因此我确定它与此有关。还是其他?

node.js firebase google-cloud-functions
1个回答
0
投票

这是由javascript处理浮点数的怪异方式引起的。 (您可以阅读更多here

例如,如果您在firebase中或仅在浏览器中的控制台中进行此操作

console.log(0.1 + 0.2);
// 0.30000000000000004

这只是JavaScript广泛的东西。解决该问题的方法是调用.toFixed(2)。这会将数字四舍五入到小数点后两位。

console.log(+(0.1 + 0.2).toFixed(2));
// 0.3

((如果您想知道为什么+放在数字之前,这是因为.toFixed()返回一个字符串。+会将它变回数字)

© www.soinside.com 2019 - 2024. All rights reserved.