PHP 中计算(int)(0.58*100)等于57的问题
Posted PHP老杨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 中计算(int)(0.58*100)等于57的问题相关的知识,希望对你有一定的参考价值。
在牵扯到php数值运算中我们有可能会遇到这样的情况,(int)(0.58*100) = 57,预期值为58,0.57经过这样的计算也是这样的。这是什么情况呢?这个问题是因为,计算机计算10进制是要把十进制转化成二进制计算完后再转化回来显示,而0.57,0.58在转化成10进制时是个无穷二进制小数也,就是不能转化成一个有穷二级制小数。当强制整形(int) 或者intval()的时候会截断小数位导致数值失真。
这看起来是个小问题,但是失之毫厘谬以千里,特别是在计算钱的时候。
如果遇到这种问题咋办?首先我认为关于价格的计算设计数据库的时候多保留几位小数比如3位或者4位,第二最小单位可以设置为分。其次就是用round()函数四舍五入。
以上是关于PHP 中计算(int)(0.58*100)等于57的问题的主要内容,如果未能解决你的问题,请参考以下文章
PHP中浮点数计算问题整理(PHP电商价格用什么函数计算?)