PHP ceil函数bug错误的解决方案

【目的】保留两位小数,若有第三位小数,则直接进1

【问题】
某些时候,php中的ceil函数会出现bug,比如说
$a = '4.90';
$b = ceil($a*100);
print_r($b);

理论上输出应该是490,但实际运行的时候输出的是491。

【分析】
这是因为float类型(浮点小数)
很多普通的十进制小数在二进制下并不是有限位的小数,有限的数值位并不能精确地记录数字的值
所以你以为的4.90在
echo sprintf('%10.30f', 4.90*100);
的时候
看到的会是
490.000000000000056843418860808015

【解决方案】
 $total_to_pay_money_x_1000 = (int)($total_to_pay_money * 1000);   

 // 乘100,向上取整,再除以100变小数,以保证两位小数
 $data['total_to_pay_money'] = ceil($total_to_pay_money_x_1000 / 10) / 100;

猜你喜欢

转载自blog.csdn.net/u013288190/article/details/79282390