function dec2sat( $decimal )
{
return $decimal * (10**8);
}
echo dec2sat(0.06999206); // result: 6999206 (float type)
var_dump(dec2sat(0.06999206) >= 6999206); // result: FALSE请大家给我解释一下为什么var_dump(dec2sat(0.06999206) >= 6999206);返回FALSE?
测试: PHP 7.2.12、PHP 7.1.22、PHP 5.6.38
发布于 2018-11-30 13:05:13
我想说的第一件事是:非常感谢您花时间寻找我的问题的解决方案。我的问题的主要目的不是找出解决方案,我需要知道导致上述意外结果的原因,因为这有助于我避免以后重复。
在看了Aleksandar Raki的答案后,我在ć中做了一些关于浮点型的搜索,现在,我想我已经找到了导致var_dump(dec2sat(0.06999206) >= 6999206);返回FALSE的原因。你可以在这里阅读:Warning: Floating point precision
我认为数字0.06999206不是真正的0.06999206,它在内部存储时可能是0.069992059999...,函数dec2sat(0.06999206)的结果是6999205.999...这就是为什么Aleksandar Rakić的解决方案返回预期结果的原因。
以下是编辑后的dec2sat()
function dec2sat( $decimal )
{
return intval(round( $decimal * (10**8) )); // $decimal always has decimal value <= 8 digits
}函数dec2sat()的主要目标是将floating point number转换为int,以避免在我的应用程序中直接处理floating point number。
https://stackoverflow.com/questions/53541387
复制相似问题