Do not understand how this simple php code works
Possible Duplicate:
PHP Math Precision
号
下面的PHP代码输出7,但我期望8。为什么不同?
1
| <?php echo (int)((0.1+0.7)*10); ?> |
- 在浮点运算中,0.1+0.7可以等于0.79999999999997,其强制转换为7。
- en.wikipedia.org/wiki/floating诳point诳准确性问题
由于浮点表示不准确,0.1+0.7不完全等于0.8。可能比那要小一些。当你使用int(..)时,它会把它截为7。
- 知道如何规避这个问题吗?
- 要绕过它,请使用bcmath-uk.php.net/manual/en/book.bc.php-gmp-uk.php.net/manual/en/book.gmp.php-或类似的方法,或者使用适当的舍入,而不是简单地强制转换为int。
- 看起来是这样的:(int)(string)((0.1+0.7)*10);,但它不是一个通用的解决方案。
- 好的,谢谢。我还考虑过用10乘,四舍五入,除以10,然后继续做它是什么,但错误可能会继续下去,无济于事。
- @Martinsbriedis:尝试用更高的十进制精度对printf(..)执行相同的操作。艾瑞克:答案是,根据你想做什么,总是有更好的方法来做。
- 在这种特殊情况下,round((0.1+0.7)*10);。
其他人已经指出了这个问题。如果您使用的是固定的小数位数(例如,使用货币时),那么最好计算和存储美分,并在向用户显示值时将其转换回美元/欧元/无论什么。