PHP浮点数精度丢失问题解决方案

php 在涉及到浮点数的计算的时候一定要对可能出现的问题作限定。如以下的现象:

1
2
3
4
5
6
7
8
9
10
$f=33.8;
var_dump(intval($f*10));//338
var_dump(intval($f*100));//3379
var_dump(intval($f*1000));//3380


$f=0.58;
var_dump(intval($f*10));//5
var_dump(intval($f*100));//57
var_dump(intval($f*1000));//580

解决方案有三个:

1
2
3
var_dump(intval(sprintf("%.2f", $f*100)));//string '58.00'//int 58
var_dump(intval(round($f*100, 1)));//float 58//int 58
var_dump(intval(number_format($f*100,2)));//string '58.00'//int 58

原则:

在进行浮点数计算的时候一定要对浮点数进行格式化!再代入进行计算处理。