我在做开发的时候,有时候在处理小数转整数的时候,会才用这种方式处理数据.
$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
函数去处理