phpでの小数点を切り捨てや切り上げする方法!【floor/ceil/round】


phpでの小数点を切り捨てや切り上げする方法!【floor/ceil/round】
目次
  1. phpの小数点の扱い
  2. PHPにおけるint型とfloat型
  3. 浮動小数点型を用いる際の注意点
  4. floor関数
  5. ceil関数
  6. round関数
  7. 桁数を指定した場合
  8. 桁数を指定しなかった場合
  9. まとめ

phpの小数点の扱い

PHPにおいて小数点を扱う際には、浮動小数点型であるfloat型あるいはdouble型を用います。浮動小数点対してint型などの整数を扱う型は整数型と呼ばれます。まずは、これらの型について

PHPにおけるint型とfloat型

PHPでは変数を定義する際に型宣言をしないため、普段は型を意識することはあまりないかもしれません。

念のため、割り算(除算)やあまりの計算をした場合、答えがどのような数値型を持つのか確認しておきましょう。

var_dump(4/2); //int(2)
var_dump(4.0/2); //float(2)
var_dump(4/2.0); //float(2)
var_dump(4.0/2.0); //float(2)

割り算(除算)を行った場合、計算する際に用いた項の数値型の情報量が大きいほうの型(int型とfloat型ではfloat型のほう)に合わされるため、いずれかの項がfloat型の場合、答えもfloat型となります。

var_dump(5/2); //int(2.5)

ですが、「5/2」についてはいずれの項もint型ではありますが、答えの「2.5」をint型で表すことができないため、2.5についてはfloat型となります。

var_dump(5%2); //int(2)
var_dump(5.0%2); //int(2)

あまりの計算の場合については、あまりは常に整数値となるため、全てint型となります。

浮動小数点型を用いる際の注意点

float型やdouble型の浮動小数点型は近似値となっており、厳密に正確な値を保存しているわけではありません。これはコンピュータが内部的に数値を2進数に変換して処理を行うために起こる誤差であり、例えば「7.6」という数値は内部的には「7.5999999999」として扱われています。

とはいっても、10進数において小数点以下14桁までの精度はありますので、普段は意識せずとも大きな問題は発生ないかと思います。float型の同値判定を行う場合は「==」演算子を使うことで「小数点以下3桁まで」の確認となるので、念のため覚えておくといいかもしれません。

それでは、これらのfloat型(double型)の切り捨て、切り上げ(繰り上げ)、四捨五入する手法について紹介します。

floor関数

float型の切り捨てを行う際にはfloor関数を使用します。

floor(数値)

floor関数は小数点以下を切り捨て、整数を返します。floorとは英語で床を意味するので、床側、つまり下限に合わせるため切り捨てと覚えるといいでしょう。

<?php
echo floor(7.6);
<実行結果>
7

ceil関数

float型の切り上げ(繰り上げ)を行う際にはceil関数を使用します。

ceil(数値)

floor関数は小数点以下を切り上げ、整数を返します。ceilとは英語で天井を意味するので、天井側、つまり上限に合わせるため切り上げになると覚えるといいでしょう。

<?php
echo ceil(7.6);
<実行結果>
8

round関数

round関数では四捨五入ができます。

round(数値 [, 桁数])

桁数の指定は任意です。桁数を指定しなかった場合は小数点以下で四捨五入します。

桁数を指定した場合

<?php
echo round(7.666666, 3);
<実行結果>
7.667

桁数を指定しなかった場合

<?php
echo round(7.666666);
<実行結果>
8

Webサイト担当者としてのスキルが身に付く

無料カウンセリングはこちら

まとめ

では今回紹介した関数を下記の表にまとめます。

関数 書式 用途
floor関数 floor(数値) 切り捨て
ceil関数 ceil(数値) 切り上げ(繰り上げ)
round関数 round(数値 [,桁数]) 四捨五入

切り捨てや切り上げは頻繁に使うものですので、ぜひ覚えておきましょう!


CodeCampus編集部
この記事を書いた人
CodeCampus編集部
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp