PHPで小数点を2桁とか3桁に切り捨てる方法
これには2つの方法があります。
- number_format 関数で切り捨てる方法
- 正規表現を使って切り捨てる方法
ここでは この2つの方法で小数点N桁以下に切り捨てる方法 をまとめました。
あとコード例とかも一緒に紹介していきます。
1. number_format 関数を使うやり方
一番簡単なのは number_format 関数を使うこと
これを使えば、小数点3桁とか2桁以下に簡単に切り捨てられます。
次が number_format 関数についての簡単な説明
number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," ) : string
パラメータが 4 つ全て渡された場合、number はドット (".") の代わりに dec_point が decimals 桁の小数の前に、千位毎にカンマ (",") の代わりに thousands_sep が追加されてフォーマットされます。
引用元 : https://www.php.net/manual/ja/function.number-format.php
これだけだと少し分かりにくい感じだけど・・・
引数を4つ渡した場合、小数点あとの桁数を $decimals に変えられるってこと です。
例えば次、小数点5桁以下を切り捨てるコード例
1 2 3 4 |
$decimal = 3.141519; $decimal = number_format( $decimal, 4, '.', '' ); print_r( $decimal ); /// => 3.1415 |
コメントにも書いたけど、ちゃんと4桁までで表示されてます。
もう1つ例を出すなら、次は3桁以降を切り捨ててるコード例
1 2 3 4 |
$decimal = 1.41421356; $decimal = number_format( $decimal, 2, '.', '' ); print_r( $decimal ); /// => 1.41 |
これは 1.41 みたいに2桁で収まってます。
とはいえ number_format 自体は小数点を切り捨てること専用の関数じゃありません。
でも確実に小数点n桁以下を切り捨てたいときに便利そうです。
2.正規表現を使ってn桁以下を切り捨てる方法
お次は preg_replace 関数から正規表現を使って切り捨てる方法
ただし、"肯定的後読み" を使うのが大事なポイント
"肯定的後読み" とは、直前にある表現がある場合に一致させるパターン です。
▼ 例 : 直前に hoge がある fuga に一致するパターン
1 |
(?<=hoge)fuga |
ただし、 (?<=hoge) の hoge 自体は含まれません。
なので、小数点以下n桁を切り捨てたいときは、こういうパターンを書きます。
1 |
'/(?<=\.\d{n})\d*$/' |
小数点以下nケタを preg_replace で空文字に置き換えるという感じ
例えば次、小数点以下3桁より下を切り捨てるコード例です。
1 2 3 4 |
$decimal = 3.141519; $decimal = preg_replace( '/(?<=\.\d{3})\d*$/', '', $decimal ); print_r( $decimal ); /// => 3.141 |
ハイライトした '/(?<=\.\d{3})\d*$/' がポイント
コメントに書いたように、 3.141 が出力されます。
そして次は小数点以下5桁よりアンダーを切り捨てるコード例
1 2 3 4 |
$decimal = 1.41421356; $decimal = preg_replace( '/(?<=\.\d{5})\d*$/', '', $decimal ); print_r( $decimal ); /// => 1.41421 |
ちゃんと 1.41421 と5ケタで表示されました。
もっと汎用的にするなら、次のように関数化すると便利かもしれません。
1 2 3 4 5 |
function trunc_to_n_decimal_points( $decimal, $n ){ if( ! is_int($n) ){ return $decimal; } $decimal = preg_replace( '/(?<=\.\d{'.$n.'})\d*$/', '', $decimal ); return $decimal; } |
▼ この関数の使用コード例
1 2 3 |
$decimal = trunc_to_n_decimal_points( 1.41421356, 5 ); print_r( $decimal ); /// => 1.41421 |
切り捨て対象にn桁を含めるかどうか、そこは個人の好みです。
切り捨てには preg_match 関数も使用できる
今紹介したのは preg_replace 関数を使った切り捨て方
同じことは preg_match 関数を使ってもできます。
例えば次のコード、これは小数点4桁以下を切り捨ててるコードです。
1 2 3 4 5 |
$decimal = 1.41421356; preg_match( '/^\d+\.\d{3}/', $decimal, $matches ); $decimal = $matches[0]; print_r( $decimal ); /// => 1.414 |
ハイライトした '/^\d+\.\d{3}/' が重要ポイント
もし n 桁以下を切り捨てたいなら {n-1} を指定すればいいだけです。
もし汎用的な関数にするなら、次みたいにするとスマートですね。
1 2 3 4 5 6 7 8 9 |
/** * 小数点以下 n 桁以下を切り捨てる **/ function trunc_to_n_decimal_points( $decimal, $n ){ if( ! is_int($n) ){ return $decimal; } preg_match( '/^\d+\.\d{'.$n.'}/', $decimal, $matches ); $decimal = $matches[0]; return $decimal; } |
▼ この関数の使用コード例
1 2 3 |
$decimal = trunc_to_n_decimal_points( 1.41421356, 3 ); print_r( $decimal ); /// => 1.414 |
この関数だと $n 桁は切り捨て対象になりません。
ここまでのまとめ
ということで、今紹介した方法まとめ
データの表示したいときとか、小数を扱う時に便利かもしれないです。
以上、PHPで小数を2桁とか3桁に切り捨てる方法でした。ではでは($・・)/~~~