PHP入門 数学関数 任意の精度で数値の演算を行う(BC Math関数)

任意の精度で数値の演算を行う方法を解説しています。

構文:abs関数

string bcadd(string $left_operand, string $right_operand [, int $scale])
int bccomp(string $left_operand, string $right_operand [, int $scale])
string bcdiv(string $left_operand, string $right_operand [, int $scale])
string bcmod(string $left_operand, string $modulus)
string bcmul(string $left_operand, string $right_operand [, int $scale])
string bcpow(string $left_operand, string $right_operand [, int $scale])

string bcpowmod(string $left_operand, string $right_operand, string $modulus[, int $scale])
bool bcscale(int $ scale)
string bcsqrt(string $operand [, int $scale])
string bcsub(string $left_operand, string $right_operand [, int $scale])

任意の精度で数値の演算を行うには、「BC Math」関数を使います。「BC Math」関数は、指定した小数点以下の桁数で数値の演算を行うことが出来ます。

BC Math関数の種類

関数説明
bcadd2つの任意精度の数値を加算する
bccomp2つの任意精度の数値を比較する
bcdiv2つの任意精度の数値を除算する
bcmod2つの任意精度の数値を剰余を取得する
bcmul2つの任意精度の数値を乗算する
bcpow任意精度数値をべき乗する
bcpowmod任意精度数値をべき乗の指定した数値による剰余
bcscaleすべてのBC演算関数におけるデフォルトのスケールを設定する
bcsqrt任意精度数値の平方根を取得する
bcsub任意精度数値の減算を行う

<?php

// BC演算関数におけるデフォルトのスケールを
// 小数点以下5桁に設定する
bcscale(6);
// 2つの値を加算する
echo bcadd('1.23456789', '5'), "<br>"; // 6.234567
// 結果の小数点以下を3桁する
echo bcadd('1.2345678', '5', 3), "<br>"; // 6.234
// 2つの値を比較する
echo bccomp ('1', '2'), "<br>";

// 小数点以下3桁まで、 2つの値を比較する
// -1
echo bccomp ('1.00001', '1',3), "<br>";    // 0 
// 小数点以下5桁まで、 2つの値を比較する
echo bccomp ('1.00001', '1',5), "<br>";    // 1


echo bcdiv('105', '6.55957'), "<br>";       // 16.007146
echo bcdiv('105', '6.55957', 3), "<br>";  // 16.007

// 2つの値の剰余を取得する
echo bcmod('4', '2'), "<br>";                 // 0
echo bcmod('2', '4'), "<br>";                 //2

// 2つの値を乗算する
echo bcmul('2', '4'), "<br>";
// 結果の小数点以下を3桁する
// 8
echo bcmul('1.34747474747', '35', 3), "<br>"; // 47.161
// べき乗(4.2の3乗)を計算する
echo bcpow('42', '3'), "<br>";                // 74.088
// 結果の小数点以下を2桁する
echo bcpow('42', '3', 2), "<br>";             // 74.08


//べき乗の指定した数値による剰余
// bamod(bcpow('2', '3', '3')と等価
// Windows環境では正常に動作しない
echo bcpowmod('2', '3', '3'), "<br>";           // 2

// 平方根を求める
echo bcsqrt('2'), "<br>";
// 結果の小数点以下を3桁する
// 1.1.414213
echo bcsqrt('2', 3), "<br>";                    // 1.414

// // 2つの値を減算する
echo bcsub('1.23456789', '5'), "<br>";          // -3.765432 
// 結果の小数点以下を4桁する
echo bcsub('1.234', '5', 4), "<br>";            // -3.7660
実行結果
実行結果