PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのbcmul()関数で2つの任意精度数値を乗算する方法を徹底解説

PHPには、通常の浮動小数点演算では精度が不足するような大きな数値や高精度な計算を扱うためのBCMath関数群が用意されています。その中のひとつであるbcmul()関数は、2つの任意精度(arbitrary precision)の数値を受け取り、それらを乗算するための数学関数です。

bcmul()関数は、2つの任意精度数値を文字列として受け取り、指定された精度(スケール)に従って結果を丸めた上で、乗算結果を文字列として返します。金額計算など、誤差が許されない場面で特に役立ちます。

bcmul()関数の構文

string bcmul( $num_string1, $num_string2, $scaleVal)

パラメータ

bcmul()関数は、以下の3つのパラメータを受け取ります。

  • $num_string1 - 左オペランド(被乗数)を表します。文字列型のパラメータです。

  • $num_string2 - 右オペランド(乗数)を表します。こちらも文字列型のパラメータです。

  • $scaleVal - 省略可能な整数型パラメータで、結果の出力における小数点以下の桁数を指定します。省略した場合のデフォルト値は0です。

戻り値

bcmul()関数は、$num_string1$num_string2を乗算した結果を、文字列として返します。

例1:$scaleValパラメータを使用しない場合

まずは、スケール値を指定せずにbcmul()関数を使用した例を見てみましょう。

<?php
   // bcmul()関数の使用例
   // 任意精度の2つの入力数値
   $num_string1 = "10.5552";
   $num_string2 = "3";

   // $scaleValパラメータなしで2つの数値を乗算
   $result = bcmul($num_string1, $num_string2);

   echo "scaleValなしの出力結果: ", $result;
?>

出力

scaleValなしの出力結果: 31

$scaleValパラメータを指定しない場合、小数点以下の桁は切り捨てられます。この例では「10.5552 × 3 = 31.6656」ですが、小数部が破棄されて「31」という結果になっています。

例2:$scaleValパラメータを使用する場合

次に、同じ入力値に対してスケール値として4を指定し、出力がどのように変わるかを確認してみます。

<?php
   // bcmul()関数の使用例
   // 任意精度の2つの入力数値
   $num_string1 = "10.5552";
   $num_string2 = "3";

   // スケール値として4を指定
   $scaleVal = 4;

   // $scaleValパラメータを指定して2つの数値を乗算
   $result = bcmul($num_string1, $num_string2, $scaleVal);
   echo "scaleValありの出力結果: ", $result;
?>

出力

scaleValありの出力結果: 31.6656

$scaleValに4を指定することで、小数点以下4桁までの正確な乗算結果「31.6656」が取得できました。このように、bcmul()関数では第3引数のスケール値を調整することで、必要な精度に応じた計算結果を柔軟にコントロールできます。

  1. PHPのimageellipse()関数で楕円を描画する方法を徹底解説

    imageellipse()は、PHPに標準で組み込まれているGDライブラリの関数の一つで、画像上に楕円を描画するために使用されます。処理が成功した場合はtrueを返し、失敗した場合はfalseを返します。 構文 bool imageellipse($image, $cx, $cy, $width, $height, $color) パラメータ imageellipse()は、以下の6つのパラメータを受け取ります:$image、$cx、$cy、$width、$height、$color。 $image − 描画対象となる画像リソースを指定します。imagecreatetruecolor()な

  2. PHPのimagecropauto()関数で画像を自動的に切り抜く方法を徹底解説

    imagecropauto()は、PHPに標準で組み込まれている関数の一つで、用意された複数のモードの中から選択して、画像を自動的に切り抜き(クロップ)することができます。構文resource imagecropauto(resource $image, int $mode, float $threshold, int $color)パラメータimagecropauto()は、$image、$mode、$threshold、$color の4つのパラメータを受け取ります。$image − 切り抜き対象となる画像リソースを指定します。$mode − 省略可能なパラメータで、切り抜きモードに対応す