PHPで端数を切り上げるceil関数を詳しく解説

PHPにおいて、小数点以下の端数を切り上げた数値にする関数がceilです。機能だけ見るとシンプルな関数ですが、注意が必要な点があり、また、いろいろな数値計算に応用できるをご存じでしょうか。今回は、ceil関数の基本と、数値計算に応用した使い方を紹介します。

ceil関数の基本

PHPのceil関数は、引数に指定された浮動小数点数の小数点以下を切り上げし、その数を返す関数です。なお、PHPの便利な点は、変数の型宣言が不要で、同じ変数を文字列としても数としても扱える点です。今回紹介するceil関数は、浮動小数点数を扱う関数ですが、その出力は整数としても文字列としても使えます。

とはいえ、ceilの引数や出力の変数型を正しく理解していないと、PHPの処理によっては正しく動作しないこともあります。そこで、次からceil関数の文法や基本的な使い方を紹介します。

そもそもceilとはどんな意味

PHPには、英単語がそのままコマンド名として使われるケースがたくさんあります。今回紹介するceilコマンドも、英単語がそのままコマンド名に採用されました。

なお、英単語のceilとは、「天井に張る」という意味です。部屋の天井に取り付ける照明器具を、シーリングライトと呼ぶのをご存じでしょうか。シーリングは、ceilの名詞形の「ceilng」で、天井という意味です。

そのため、ceilには、数値を切り上げするという意味でも使われることから、関数名としても使われています。

PHPのceilコマンドの文法

PHPで数値を切り上げする関数、ceil関数の文法は次のとおりです。

引数で指定する数値はfloat型、すなわち浮動小数点数です。また、ceil関数の出力も浮動小数点数です。なお、PHPの変数は、大抵の場合、変数の型を意識する必要はありません。しかし、プログラムによっては、ceil関数の出力を整数型や文字列に変換が必要なケースもあります。

ceil関数を使った簡単な例

引数が数値でなかった場合

先ほど説明したように、ceil関数は、引数に浮動小数点数を指定すると、それを小数点の位置で切り上げした数値を返します。しかし、数値以外を指定してもエラーにはなりません。

例えば、falseやnull、空文字などが指定された場合、ceil関数は0を返します。そのため、ceil関数に利用する変数の作成に失敗しても、エラーやワーニングが表示されません。

そのため、PHPでceil関数を利用する場合、事前に引数の値をチェックし、数値であることをチェックしてから、ceil関数で計算する、といったプログラムを検討してください。

引数が数字でなかった場合の例

PHPの小数点を扱う関数

PHPには、今回紹介するceil関数のような浮動小数点数を扱う関数が他にもあります。次から、それらと比較してceil関数の機能について解説します。

切り下げはfloor関数

先ほど紹介したように、ceilは天井に張る、という意味の英単語をそのまま使った関数です。そして、ceilと逆に、浮動小数点数を引数にして、その数値の切り下げした値を返す関数がfloorです。

なお、floorは、日本語でも床のことをフロアと言うように、床という意味の英単語です。切り上げが天井のceil、切り下げが床のfloorという関数名なので、それぞれの意味を連想すると覚えやすいのではないでしょうか。

floor関数の文法

四捨五入はround

PHPでは、今回紹介するceilや先ほどのfloorの他に、桁を指定して、その桁で四捨五入するround関数も使えます。

なお、ceilとfloorは、小数点の位置で切り上げや切り下げした数値を計算するので、引数は1つでしたが、roundは、数値の他に、桁数の位置を指定できます。そのため、例えば小数点2桁で、四捨五入した数値を計算する、といった使い方が可能です。

round関数の使用例

ceil関数の応用例

先ほど説明したようにPHPのceil関数は、小数点の位置で切り上げする、というシンプルな機能です。しかし、実際のプログラムでは、それだけでは処理を作れない、というケースがよくあります。そこで、ceil関数の応用例を紹介します。

特定の桁で切り上げする場合

ceil関数は、小数点で切り上げするので、桁を指定することはできません。しかし、ある桁で切り上げしたいケースはよくあります。その場合よく使われるのは、あらかじめ小数点を変更し、ceil関数で切り上げした後、小数点を基の位置に戻す処理です。

例えば、小数点2桁で切り上げする場合、次のように先に100倍し、ceil関数の結果を100で割ります。

逆に100以下を切り上げする場合は、次のように先に100で割り、ceil関数の結果を100倍します。

マイナスの値を扱う場合

ceil関数の機能は切り上げですが、マイナスの数を扱う場合、より0に近い方に数字に合わせることから、まるで切り下げのように動作します。

ceil関数でマイナスの数を扱う例

マイナスの数を絶対値で見た場合に、より大きな数に切り上げしたい場合は、次のようにif文でceil関数とfloor関数を切り替えて使用します。

ceil関数とfloor関数を切り替える例

ceil関数を使う際の注意点

PHPに限らず、プログラミング言語で浮動小数点数を扱う場合、内部で2進数に変換し、計算しています。そのため、厳密にチェックすると、ごく小さな誤差が発生します。

その数字をそのまま使う場合、その誤差は自動で丸められるので問題ありませんが、ceil関数では、その誤差のせいで予想した数字と合わないケースが発生します。

浮動小数点数の計算の誤差

先ほど説明したように、PHPでも浮動小数点数の計算で、厳密にチェックすると誤差が生じます。次の式は、下記の計算は、そのまま計算するのとceil関数で処理すると結果が変わる例です。

これは、浮動小数点数を厳密に数値として扱った場合の誤差が原因です。例えば、この例の$aを、100桁の浮動小数点数として表示すると、厳密には55ではなく、プラスの誤差が含まれます。そのため、その極めて小さな誤差をceil関数が扱うことで、計算結果が変わってしまいます。

浮動小数点数の誤差を回避する例

先ほどの式のように計算結果が違う場合、 計算した浮動小数点数を文字列に変換し、それをceil関数の入力のすることで回避可能です。次の例を見てください。

この例では、$aの数値を、(string)でキャストし、文字列に変換して、ceil関数に渡しています。この方法だと、文字列から2進数の数値に変換して処理するので、正しい結果が得られます。

まとめ

これまで説明したように、ceil関数のceilには「天井を張る」という意味があり、小数点で切り上げを計算する関数です。PHPには、同じような機能の関数として、切り下げのfloor関数や四捨五入のround関数などもあり、ceil関数と同じように使われます。

さらに、今回解説したように、ceil関数自体はシンプルな機能ですが、応用すればいろいろな機能も書けるので、ぜひ、使い方をマスターしてください。

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?