php的精度计算问题(bcadd和bcsub)

php日常bug 专栏收录该内容
87 篇文章 1 订阅

一、前言

      我们在进行php开发的时候经常会遇到浮点型的问题,特别是涉及金额的部分,常常需要进行加减运算。当小数点的位数比较多的时候,往往容易犯一些很低级的错误。这里记录一下php的精度计算和封装的小demo

二、关于php的高精度问题

1、概念解释

这篇文章的解释最清楚:

php高精度计算问题

2、高精度数值对比大小问题

下面这篇文章讲的很好:

临时发一个项目遇到的PHP浮点计算问题

三、封装的小demo

//$m和$n代表传入的两个数值,主要就是这两个数值之间的比较
//$x代表传入的方法,比如是;add,sub等
//$scale  代表传入的小数点位数。这个根据需求更改即可
public function calc($m,$n,$x,$scale){
    $errors=array(
      '被除数不能为零',
      '负数没有平方根'
    );
    switch($x){
      case 'add':
        $t=bcadd($m,$n,$scale);
        break;
      case 'sub':
        $t=bcsub($m,$n,$scale);
        break;
      case 'mul':
        $t=bcmul($m,$n);
        break;
      case 'div':
        if($n!=0){
          $t=bcdiv($m,$n);
        }else{
          return $errors[0];
        }
        break;
      case 'pow':
        $t=bcpow($m,$n);
        break;
      case 'mod':
        if($n!=0){
          $t=bcmod($m,$n);
        }else{
          return $errors[0];
        }
        break;
      case 'sqrt':
        if($m>=0){
          $t=bcsqrt($m);
        }else{
          return $errors[1];
        }
        break;
    }
      return $t;
  }

调用方式:

 $result= $this->calc(2.001,3.002,'sub',3);

end

  • 2
    点赞
  • 2
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值