在 PHP 和其他一些语言都会存在这个问题,转换浮点数为整数的时候会出现精度丢失,如下:

1
$n="19.99"; print intval($n*100); // prints 1998

解决办法:

1.转换成字符串再 intval

1
print intval(strval($n*100)); // prints 1999

2.使用 round 函数替代 floatval

1
php -r "echo round(19.99*100);"

3.先转换成字符串再取整

1
print intval(strval($n*100)); // prints 1999

4.使用 bc 系列函数

具体原因:http://www.laruence.com/2013/03/26/2884.html