`
yunfubaoyang
  • 浏览: 3753 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

php浮点数计算问题

    博客分类:
  • php
阅读更多

如果用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浮点数精度问题汇总,本文着重探讨PHP浮点数精度损失问题,用三个段落不同的方式讲解了这个问题的形成原因以及解决方法,需要的朋友可以参考下

    简单谈谈php浮点数精确运算

    这里大数直接用一个由0-9组成的string表示,计算结果返回的也是一个 string。 bcadd — 将两个高精度数字相加 bccomp — 比较两个高精度数字,返回-1, 0, 1 bcdiv — 将两个高精度数字相除 bcmod — 求高精度数字...

    PHP之浮点数计算比较以及取整数不准确的解决办法

    主要介绍了PHP之浮点数计算比较以及取整数不准确的解决办法,代码超简单,需要的朋友可以参考下

    PHP中浮点数计算比较及取整不准确的解决方法

    主要介绍了PHP 浮点数计算比较及取整不准确的解决方法,需要的朋友可以参考下

    计算机后端-PHP视频教程. php与mysql加强- 05. php加强52-浮点数不够精确wmv.wmv

    计算机后端-PHP视频教程. php与mysql加强- 05. php加强52-浮点数不够精确wmv.wmv

    php中让人头疼的浮点数运算分析

    主要介绍了php中让人头疼的浮点数运算,结合实例形式分析了php针对浮点数运算round函数的使用方法,需要的朋友可以参考下

    php精度计算的问题解析

    主要介绍了php精度计算的问题解析,如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如上面 的 echo intval( 0.58*100 );会打印57,而不是58,需要的朋友可以参考下

    PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)

    PHP array_sum() 函数用于计算数组中所有值的和,以整数或浮点数返回计算结果,非数字的单元将视作 0 。 语法: number array_sum( array array ) 例子: &lt;?php $arr_a = array(1, 2, 3, a); echo array_sum($...

    总结PHP中数值计算的注意事项

    一:四舍五入 1.round — 对浮点数进行四舍五入 float round ( float $val [, int $precision ] ... 问题显而易见,所以计算的时候要格外注意这一点 解决方法 : floor(11 + 0.01); 二:整数和小数相乘除 坑点:3.

    php数值计算num类简单操作示例

    本文实例讲述了php数值计算num类简单操作。分享给大家供大家参考,具体如下: ceil(float $value);//返回不小于 value 的下一个整数,value 如果有小数部分则进一位 &lt;?php echo ceil(4.3); // 5 echo ceil(9.999...

    php数组函数序列之array_sum() – 计算数组元素值之和

    如果其中有一个或多个值是浮点数,则返回浮点数。 PHP 4.2.1 之前的版本修改了传入的数组本身,将其中的字符串值转换成数值(大多数情况下都转换成了零,根据具体制而定)。 语法 array_sum(array) 参数 描述 array ...

    PHP中的float类型使用说明

    使用PHP的float类型需要注意的是:PHP的float类型的精度有点问题。如果需要高精度的数学计算,可以使用php提供的专用的数学函数 arbitrary precision math functions系列和gmp系列函数。还有就是不要试图进行比较...

    PHP数学运算与数据处理实例分析

    PHP是一种松散类型的脚本语言,变量可以根据计算的需求改变数据类型。这就允许引擎动态地完成类型转换。所以,如果计算中包含数值和字符串,字符串会在完成计算之前转换为数值,而数值则会在与字符串连接之前转换为...

    php-number:在PHP中以正确的方式处理数字

    问题您曾经在PHP中使用过价格,权重或其他任何数字吗? 他们是什么类型的? 一个整数? 弦吗? 还是您有一个管理小数的浮点数? 以及如何使用它们进行计算? 我们都为浮法的而苦苦挣扎。 啊,经过数小时的调查,您...

Global site tag (gtag.js) - Google Analytics