关于PHP的浮点运算取floor(3)得到结果2的奇怪问题
来源:互联网 发布:淘宝发展趋势 编辑:程序博客网 时间:2024/05/21 01:45
$amount = 300;$num = 1.2;$num = $num - 1.1;$num = floatval($num);var_dump($num);$amount = ($num * $amount) / 10;var_dump($amount);var_dump(floor($amount));exit;
结果:
float 0.1
float 3
float 2
结果超乎你想象,PHP的浮点运算,就是这么坑。。。。。。
过了两个小时,找到解决办法,如下:
$amount = 3000;$num = 1.2;$num -= 1;// $amount = $num * $amount / 10;$amount = bcmul($num, $amount) / 10;echo $amount . "\n";echo floor($amount);exit;
http://php.freehostingguru.com/function.php-bcmul.php
关于这个问题,可以参考这里:
http://stackoverflow.com/questions/812815/php-intval-and-floor-return-value-that-is-too-low
我要赞叹的是国外每次对问题的讨论都非常深入。
另外关于这个问题,我们平时使用PHP进行的计算都太不严谨,如果要进行精确的计算,不想出现意外结果的计算的话,要使用BC函数库,如下:
http://php.freehostingguru.com/group.php-5.php
要使用 BC 这个函数库,要在编译 PHP 程序时加入 --enable-bcmath 的选项。bcadd:将二个高精确度数字相加。bccomp:比较二个高精确度数字。bcdiv:将二个高精确度数字相除。bcmod:取得高精确度数字的余数。bcmul:将二个高精确度数字相乘。bcpow:求一高精确度数字次方值。bcscale:配置程序中所有 BC 函数库的默认小数点位数。bcsqrt:求一高精确度数字的平方根。bcsub:将二个高精确度数字相减。
0 0
- 关于PHP的浮点运算取floor(3)得到结果2的奇怪问题
- 关于浮点数的运算误差问题
- PHP的floor函数问题。
- 关于split分割字符串,空结果不能得到的问题
- 关于split分割字符串,空结果不能得到的问题
- 关于浮点数不能进行位运算的问题
- 关于浮点数运算的比较大小问题
- 记录关于JavaScript 浮点数运算的精度问题
- JavaScript浮点运算的问题
- JavaScript浮点运算的问题
- js浮点运算的问题
- js的浮点运算问题
- 关于浮点的问题
- 关于C语言的得到整数除法结果向上取整的数学证明
- 取整,关于ceil与floor的区别
- 关于ADODB的奇怪问题
- 关于NSUInteger的奇怪问题
- 关于CString的奇怪问题
- struts2中的page中的namespace取名最好和你模块名一样
- Mongodb集群部署以及集群维护命令
- 三次样条函数插值
- 都是copy paste惹的事
- 如何在Ubuntu上创建及管理LXC容器?
- 关于PHP的浮点运算取floor(3)得到结果2的奇怪问题
- 配置下载Android源代码的过程及问题解决
- Hadoop学习笔记1
- Spring下载地址
- JAVAEE中用session实现简单的购物车
- JAVA 多个线程访问共享数据和数据格式 黑马视频
- MRC、ARC,MRC和ARC的混编
- SQL truncate 、delete与drop区别
- A* A星 算法 C语言 实现代码