我在做开发的时候,有时候在处理小数转整数的时候,会才用这种方式处理数据.

$a = 2401.18;
$b = intval($a*100);

然而现实有点残酷,我们想要的应该是240118,但是事实上是240117.

这个问题之前,偶尔有遇到过,但是都没有深究其原因,每次遇到都是一脸懵逼.

然后做了个测试

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

$n=39.99;
print intval($n*100); //3999

$n = 0.58;
print intval($n*100); //57

找不到规律啊.一直觉得这问题是弱类型语言的坑,PHP自身的Bug,后面查看资料发现是浮点数的问题,不是PHP的问题.

鸟哥的一篇博文中有针对这个问题,做一个说明:PHP浮点数的一个常见问题的解答

没看懂,但是终于大概知道了,是什么问题了.

那么如何去解决这个问题,达到我们想要的结果呢?

第一种(使用intval+strval):

$n=2401.18;
print intval(strval($n*100)); // 240118

第二种(使用round)

$n=2401.18;
print intval(round($n*100)); // 240118

第三种(使用bcmath)

$n = 2401.18
print intval(bcmul($n,100));

三种方法都可以达到想要的效果.

或者直接乘,不需要用intval函数去处理