プログラムを書いていると、小数点以下の処理に時々ハマります…(*´Д`)
特に色んな言語を利用していると余計に混乱するので、備忘録としてまとめます。
PHPでは、小数点以下の処理(切り上げ、切り捨て、四捨五入)を行うための標準的な関数が用意されています。以下にそれぞれの方法を紹介します。
1. 切り上げ (ceil
)
ceil
関数を使うと、数値を切り上げることができます。
$number = 3.14;
$result = ceil($number); // 4
2. 切り捨て (floor
)
floor
関数を使うと、数値を切り捨てることができます。
$number = 3.14;
$result = floor($number); // 3
3. 四捨五入 (round
)
round
関数を使うと、数値を四捨五入することができます。小数点以下の桁数を指定することもできます。
$number = 3.14;
$result = round($number); // 3
$number2 = 3.75;
$result2 = round($number2); // 4
// 小数点第2位まで四捨五入する場合
$number3 = 3.1459;
$result3 = round($number3, 2); // 3.15
ただし、サンプルソースを見てわかるように、桁指定できるのround関数のみとなっているため、切り上げ、切り捨てを行う場合は一工夫必要。
改良版:桁数を指定して切り上げ (ceil
)
$number = 3.14159;
$precision = 2; // 小数点以下2桁を指定
$result = ceil($number * pow(10, $precision)) / pow(10, $precision); // 3.15
改良版:桁数を指定して切り捨て (floor
)
$number = 3.14159;
$precision = 2; // 小数点以下2桁を指定
$result = floor($number * pow(10, $precision)) / pow(10, $precision); // 3.14
このようにして、桁数を指定して ceil
や floor
を使うことが可能です。
何をしているかというと、まずその桁数に応じて数値を10のべき乗で掛けてから処理し、最後に元に戻すという方法を利用しています。
念のため、pow
関数の説明も記載しておきます。
pow()
は、PHPで使用できる関数の一つで、指定した数値の累乗(べき乗)を計算します。具体的には、pow(基数, 指数)
の形式で使用し、「基数」を「指数」回かけた結果を返します。
※pow
関数の使い方
pow(2, 3); // 2の3乗、結果は8
pow(5, 2); // 5の2乗、結果は25
pow(10, -1); // 10の-1乗、結果は0.1
pow(10, 2)
だと (10^2 = 100) という計算になりますし、pow(10, -1)
のように負の指数も扱えるので、これは (10^{-1} = 0.1) となります。
先ほどの桁数を指定する方法で pow(10, $precision)
を使用するのは、小数点以下の桁数を動かすためです。例えば、pow(10, 2)
で100を掛けてから、ceil
や floor
を行い、最終的に100で割ることで元の桁に戻すという処理になります。