在 PHP 和其他一些语言都会存在这个问题,转换浮点数为整数的时候会出现精度丢失,如下:
<?php $n="19.99"; print intval($n*100); // prints 1998
1 2 3 | <?php $n="19.99"; print intval($n*100); // prints 1998 |
解决办法:
1.转换成字符串再 intval
print intval(strval($n*100)); // prints 1999
1 | print intval(strval($n*100)); // prints 1999 |
2.使用 round 函数替代 floatval
php -r "echo round(19.99*100);"
1 | php -r "echo round(19.99*100);" |
3.先转换成字符串再取整
print intval(strval($n*100)); // prints 1999
1 | print intval(strval($n*100)); // prints 1999 |