PHPプログラミング

ベストプラクティス

数値の扱い

浮動小数点数の四捨五入(round関数) / 切り上げ(ceil関数) / 切り捨て(floor関数)

  • このエントリーをはてなブックマークに追加

浮動小数点数の四捨五入、切り上げ、切り捨てを行う方法を解説します。

目次

  1. #  便利な四捨五入の関数
  2. #  四捨五入:round関数
  3. #  切り上げ:ceil関数
  4. #  切り捨て:floor関数
  5. #  ceil関数、floor関数を任意の位置で使用する

便利な四捨五入の関数

数値の計算を扱うときに出番の多い、浮動小数点数の丸め処理。
主に使うのは通常の四捨五入、強制的な切り上げ、そして切り捨ての3種類。
今回は次のような場合に活用できる方法を解説していきます。

  • 浮動小数点数の四捨五入を行いたい
  • 四捨五入する位置を指定したい
  • 浮動小数点数を強制的に切り上げたい
  • 浮動小数点数を強制的に切り捨てたい
  • 任意の位置で浮動小数点数を強制的に切り上げ or 切り捨てたい

四捨五入:round関数

通常の四捨五入を行いたい場合、round関数を使用します。

round( $number [, $precision [, $mode]]);

1つ目の引数$numberは四捨五入したい数値です。
この引数のみ必須。

2つ目の$precisionは丸める桁数、3つ目の$modeは丸めるモードを指定します。
いずれもオプションとなるため、必要に応じて指定してください。

試しにいくつかの浮動小数点数に対してround関数を使ってみましょう。

実行例

<?php
var_dump( round( 1.4));			// float 1
var_dump( round( 0.4156));		// float 0
var_dump( round( 10.2246));		// float 10
var_dump( round( -7.115));		// float -7
var_dump( round( -210.22157));	// float -210

このように、正負に関わらず、浮動小数点数については四捨五入されます。
続いて、四捨五入する位置を指定して実行してみます。

実行例

<?php
var_dump( round( 0.4156, 2));			// float 0.42
var_dump( round( 10.2246, 2));		// float 10.22
var_dump( round( -7.115, 1));			// float -7.1
var_dump( round( -210.22157, 3));		// float -210.222

指定した位置で、しっかりと四捨五入されました。
最後に、四捨五入のモードを指定してみます。
指定できる定数は次の4種類で、四捨五入の対象となる値が「5」の場合に切り上げるか、切り下げるかの方針を指定します。

  • PHP_ROUND_HALF_UP – 初期値。0から離れる方向に四捨五入。「1.5」は「2」に、「-1.5」は「-2.0」に丸めます。
  • PHP_ROUND_HALF_DOWN – 0に近く方向に四捨五入。「1.5」は「1」に、「-1.5」は「-1.0」に丸めます。
  • PHP_ROUND_HALF_EVEN – 偶数になる方向へ四捨五入。「1.5」は「2」に、「-1.5」は「-2」に丸めます。
  • PHP_ROUND_HALF_ODD – 奇数になる方向へ四捨五入。「1.5」は「1」に、「-1.5」は「-1」に丸めます。

実行例

<?php
// 正の数値
var_dump( round( 9.55, 1, PHP_ROUND_HALF_UP));		// float 9.6
var_dump( round( 9.55, 1, PHP_ROUND_HALF_DOWN));	// float 9.5
var_dump( round( 9.55, 1, PHP_ROUND_HALF_EVEN));	// float 9.6
var_dump( round( 9.55, 1, PHP_ROUND_HALF_ODD));		// float 9.5

// 負の数値
var_dump( round( -9.55, 1, PHP_ROUND_HALF_UP));		// float -9.6
var_dump( round( -9.55, 1, PHP_ROUND_HALF_DOWN));	// float -9.5
var_dump( round( -9.55, 1, PHP_ROUND_HALF_EVEN));	// float -9.6
var_dump( round( -9.55, 1, PHP_ROUND_HALF_ODD));	// float -9.5

切り上げ:ceil関数

浮動小数点数を強制的に切り上げたいときはceil関数を使います。

ceil( $number);

round関数のように適用する位置を指定することはできません。

実行例

<?php
var_dump( ceil( 1.5));			// float 2
var_dump( ceil( -1.5));		// float -1
var_dump( ceil( 9.1215515));	// float 10
var_dump( ceil( -9.1215515));	// float -9
var_dump( ceil( 102.0012));	// float 103

切り捨て:floor関数

浮動小数点数を強制的に切り捨てたいときはfloor関数を使います。

floor( $number);

ceil関数と同様、round関数のように適用する位置を指定することはできません。

実行例

<?php
var_dump( floor( 1.5));			// float 1
var_dump( floor( -1.5));		// float -2
var_dump( floor( 9.1215515));	// float 9
var_dump( floor( -9.1215515));	// float -10
var_dump( floor( 102.0012));	// float 102

ceil関数、floor関数を任意の位置で使用する

ceil関数floor関数は浮動小数点数に一律で実行するため位置を指定することはできませんが、次のような方法で位置を指定して実行することも可能です。

実行例

<?php

$number = 9.1215515;

// 一時的に4桁上げる
$number *= 10000;

// 切り下げを実行
$number = floor($number);

// 桁数を戻す
$number /= 10000;

var_dump($number);	// float 9.1215

上記のコードは小数点第5位以降に対してfloor関数で切り捨てを行っています。
一時的に「10000」を掛けて桁数を移動し、切り捨てた後に「10000」で割って桁数を戻します。
この操作を行うことで、任意の位置に対して強制切り上げ、切り捨てを適用することができます。

以上、四捨五入に関する関数の使用方法でした。

  • このエントリーをはてなブックマークに追加