如果我在Firebase函数(在JavaScript中)中执行以下公式:
class OutOfStockException extends Exception
{
public function __construct($message = "")
{
parent::__construct($message);
}
public function report() {
\Log::debug('Product out of stock');
}
}
结果为-0.009999999999999995
但是,如果我在计算器上执行此方程,则该值为-0.01
我应该注意,我粘贴了上面代码的简化版本,但是所有变量都获得了parseFloat操作,因此我确定它与此有关。还是其他?
答案 0 :(得分:1)
这是由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()
返回了一个字符串。+
将其返回了一个数字)