개발 꿀팁/PHP

php의 정확도 계산 문제(bcadd와 bcsub)

Jammie 2022. 7. 22. 16:41
반응형

일. 서언
우리는 php 개발을 할 때 부동 소수점형의 문제를 자주 겪는데, 특히 금액에 관한 부분은 가감산(加运算山)이 필요하기 때문이다.소수점의 자릿수가 비교적 많을 때, 왕왕 낮은 수준의 실수를 범하기 쉽다.php의 정밀도 계산과 패키지의 작은 demo를 기록한다.

2. php에 관한 고정밀 문제
1.개념해석

이 문장의 해석이 가장 분명하다.

php 고정밀 계산 문제

2, 고정밀 수치 대비 크기 문제

아래의 이 문장은 매우 잘 서술되어 있다.

프로젝트 PHP 부동 소수점 계산 문제 임시 발행

3. 캡슐화된 작은 데모

//$m과 $n은 들어오는 두 수치를 나타내며, 주로 이 두 수치 사이의 비교이다
//$x는 들어오는 방법을 나타냅니다. 예: add, sub 등
//$scale은 들어오는 소수점 자리수를 나타냅니다.이건 필요에 따라 변경하시면 됩니다
public function calc($m,$n,$x,$scale){
    $errors=array(
      '피제수는 0이 될 수 없다',
      '음수는 제곱근이 없다'
    );
    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);
반응형