如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug
,是跨语言的,我用python也遇到这个问题。所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面介绍一下一些常用的BC高精确度函数使用。
php BC高精确度函数库包含了:相加,比较,相除,相减,求余,相乘,n次方,配置默认小数点数目,求平方。这些函数在涉及到有关金钱计算时比较有用,比如电商的价格计算。
/**
* 两个高精度数比较
*
* @access global
* @param float $left
* @param float $right
* @param int $scale 精确到的小数点位数
*
* @return int $left==$right 返回 0 | $left<$right 返回 -1 | $left>$right 返回 1
*/
var_dump(bccomp($left=4.45, $right=5.54, 2));
// -1
/**
* 两个高精度数相加
*
* @access global
* @param float $left
* @param float $right
* @param int $scale 精确到的小数点位数
*
* @return string
*/
var_dump(bcadd($left=1.0321456, $right=0.0243456, 2));
//1.04
/**
* 两个高精度数相减
*
* @access global
* @param float $left
* @param float $right
* @param int $scale 精确到的小数点位数
*
* @return string
*/
var_dump(bcsub($left=1.0321456, $right=3.0123456, 2));
//-1.98
/**
* 两个高精度数相除
*
* @access global
* @param float $left
* @param float $right
* @param int $scale 精确到的小数点位数
*
* @return string
*/
var_dump(bcdiv($left=6, $right=5, 2));
//1.20
/**
* 两个高精度数相乘
*
* @access global
* @param float $left
* @param float $right
* @param int $scale 精确到的小数点位数
*
* @return string
*/
var_dump(bcmul($left=3.1415926, $right=2.4569874566, 2));
//7.71
/**
* 设置bc函数的小数点位数
*
* @access global
* @param int $scale 精确到的小数点位数
*
* @return void
*/
bcscale(3);
var_dump(bcdiv('105', '6.55957'));
// 16.007
注意点:关于设置的位数,超出部分是丢弃掉,而不是四舍五入
相关推荐
主要介绍了PHP浮点数精度问题汇总,本文着重探讨PHP浮点数精度损失问题,用三个段落不同的方式讲解了这个问题的形成原因以及解决方法,需要的朋友可以参考下
这里大数直接用一个由0-9组成的string表示,计算结果返回的也是一个 string。 bcadd — 将两个高精度数字相加 bccomp — 比较两个高精度数字,返回-1, 0, 1 bcdiv — 将两个高精度数字相除 bcmod — 求高精度数字...
主要介绍了PHP之浮点数计算比较以及取整数不准确的解决办法,代码超简单,需要的朋友可以参考下
主要介绍了PHP 浮点数计算比较及取整不准确的解决方法,需要的朋友可以参考下
计算机后端-PHP视频教程. php与mysql加强- 05. php加强52-浮点数不够精确wmv.wmv
主要介绍了php中让人头疼的浮点数运算,结合实例形式分析了php针对浮点数运算round函数的使用方法,需要的朋友可以参考下
主要介绍了php精度计算的问题解析,如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如上面 的 echo intval( 0.58*100 );会打印57,而不是58,需要的朋友可以参考下
PHP array_sum() 函数用于计算数组中所有值的和,以整数或浮点数返回计算结果,非数字的单元将视作 0 。 语法: number array_sum( array array ) 例子: <?php $arr_a = array(1, 2, 3, a); echo array_sum($...
一:四舍五入 1.round — 对浮点数进行四舍五入 float round ( float $val [, int $precision ] ... 问题显而易见,所以计算的时候要格外注意这一点 解决方法 : floor(11 + 0.01); 二:整数和小数相乘除 坑点:3.
本文实例讲述了php数值计算num类简单操作。分享给大家供大家参考,具体如下: ceil(float $value);//返回不小于 value 的下一个整数,value 如果有小数部分则进一位 <?php echo ceil(4.3); // 5 echo ceil(9.999...
如果其中有一个或多个值是浮点数,则返回浮点数。 PHP 4.2.1 之前的版本修改了传入的数组本身,将其中的字符串值转换成数值(大多数情况下都转换成了零,根据具体制而定)。 语法 array_sum(array) 参数 描述 array ...
使用PHP的float类型需要注意的是:PHP的float类型的精度有点问题。如果需要高精度的数学计算,可以使用php提供的专用的数学函数 arbitrary precision math functions系列和gmp系列函数。还有就是不要试图进行比较...
PHP是一种松散类型的脚本语言,变量可以根据计算的需求改变数据类型。这就允许引擎动态地完成类型转换。所以,如果计算中包含数值和字符串,字符串会在完成计算之前转换为数值,而数值则会在与字符串连接之前转换为...
问题您曾经在PHP中使用过价格,权重或其他任何数字吗? 他们是什么类型的? 一个整数? 弦吗? 还是您有一个管理小数的浮点数? 以及如何使用它们进行计算? 我们都为浮法的而苦苦挣扎。 啊,经过数小时的调查,您...