忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

MySQL 比較的使用する数値丸めを行う数学関数について(CEILING、FLOOR、ROUND、TRUNCATE)

MySQL ではいろんな数学関数があります。三角関数(SIN, COSIN, TAN, LOG, ...)や対数に関する(LOG, ...)等がありますが、 これらは通常であればほぼ使う機会が無いと思います。 私自身も三角関数や対数は使ったことがありません。(科学計算を行うシステムであれば必要かもしれませんが)

数学関数のなかで使うとすれば、小数点以下の丸めなどを行う CEILINGFLOORROUNDTRUNCATE 関数だと思います。


■CEILING(最小整数値)

CEILING 関数は、与えられた数値以上で最小の整数値を返します。

CEILING 関数は以下の様な引数をとります。

CEILING(X)
-- X : 数値データ(小数点以下ありの正確値、浮動小数点型データなど)
-- CEIL(X) はシノニム


それでは、CEILING 関数の使用例を示します。

MariaDB [(none)]> SELECT
    ->     CEILING(1.25)     AS '小数以下ありの正の値'
    ->    ,CEILING(-1.25)    AS '小数以下ありの負の値'
    ->    ,CEILING('1.25')   AS '文字列の小数以下ありの正の値'
    ->    ,CEILING('-1.25')  AS '文字列の小数以下ありの負の値'
    -> ;
+----------------------+----------------------+------------------------------+------------------------------+
| 小数以下ありの正の値 | 小数以下ありの負の値 | 文字列の小数以下ありの正の値 | 文字列の小数以下ありの負の値 |
+----------------------+----------------------+------------------------------+------------------------------+
|                    2 |                   -1 |                            2 |                           -1 |
+----------------------+----------------------+------------------------------+------------------------------+
1 row in set (0.00 sec)

確かに与えられた数値以上で最小の整数値を返してのが分かります。
また、上の例の様に与えるデータは文字列でも同様の結果が得られます。


■FLOOR(最大整数値)

FLOOR 関数は、与えられた数値以下で最大の整数値を返します。

FLOOR 関数は以下の様な引数をとります。

FLOOR(X)
-- X : 数値データ(小数点以下ありの正確値、浮動小数点型データなど)


それでは、FLOOR 関数の使用例を示します。

MariaDB [(none)]> SELECT
    ->     FLOOR(1.25)     AS '小数以下ありの正の値'
    ->    ,FLOOR(-1.25)    AS '小数以下ありの負の値'
    ->    ,FLOOR('1.25')   AS '文字列の小数以下ありの正の値'
    ->    ,FLOOR('-1.25')  AS '文字列の小数以下ありの負の値'
    -> ;
+----------------------+----------------------+------------------------------+------------------------------+
| 小数以下ありの正の値 | 小数以下ありの負の値 | 文字列の小数以下ありの正の値 | 文字列の小数以下ありの負の値 |
+----------------------+----------------------+------------------------------+------------------------------+
|                    1 |                   -2 |                            1 |                           -2 |
+----------------------+----------------------+------------------------------+------------------------------+
1 row in set (0.00 sec)

確かに与えられた数値以下で最大の整数値を返してのが分かります。 (「-1.25」の場合は「-1」の1個更にマイナスで一番近い値は「-2」なので結果「-2」となります。)
また、上の例の様に与えるデータは文字列でも同様の結果が得られます。

■ROUND(丸め処理)

ROUND 関数は、与えられた数値の指定小数点位置で丸め処理を行い値を返します。

ROUND 関数は以下の様な引数をとります。

ROUND(X, DP)
ROUND(X)
-- X : 数値データ(小数点以下ありの正確値、浮動小数点型データなど)
-- DP: 小数点位置(ROUND(X) は ROUND(X, 0) と同様)
       (DP がマイナスの場合は小数点から左側の位の大きい方を「0」にする)


それでは、ROUND 関数の使用例を示します。

MariaDB [(none)]> SELECT
    ->     ROUND(-1.25)
    ->    ,ROUND(-1.51)
    ->    ,ROUND(1.25)
    ->    ,ROUND(1.51)
    ->    ,ROUND(-1.251, 2)
    ->    ,ROUND(-1.515, 2)
    ->    ,ROUND(1.251, 2)
    ->    ,ROUND(1.515, 2)
    -> ;
+--------------+--------------+-------------+-------------+------------------+------------------+-----------------+-----------------+
| ROUND(-1.25) | ROUND(-1.51) | ROUND(1.25) | ROUND(1.51) | ROUND(-1.251, 2) | ROUND(-1.515, 2) | ROUND(1.251, 2) | ROUND(1.515, 2) |
+--------------+--------------+-------------+-------------+------------------+------------------+-----------------+-----------------+
|           -1 |           -2 |           1 |           2 |            -1.25 |            -1.52 |            1.25 |            1.52 |
+--------------+--------------+-------------+-------------+------------------+------------------+-----------------+-----------------+
1 row in set (0.00 sec)

確かに与えられた数値を指定小数点位置で丸め処理がされた値を返してのが分かります。 (数値がマイナスの場合は絶対値で丸め処理を行い、その値にマイナスをしている様な感じです。)
また、上の例の様に与えるデータは文字列でも同様の結果が得られます。

MariaDB [(none)]> SELECT
    ->     ROUND('-1.25')
    ->    ,ROUND('-1.51')
    ->    ,ROUND('1.25')
    ->    ,ROUND('1.51')
    ->    ,ROUND('-1.251', 2)
    ->    ,ROUND('-1.515', 2)
    ->    ,ROUND('1.251', 2)
    ->    ,ROUND('1.515', 2)
    -> ;
+----------------+----------------+---------------+---------------+--------------------+--------------------+-------------------+-------------------+
| ROUND('-1.25') | ROUND('-1.51') | ROUND('1.25') | ROUND('1.51') | ROUND('-1.251', 2) | ROUND('-1.515', 2) | ROUND('1.251', 2) | ROUND('1.515', 2) |
+----------------+----------------+---------------+---------------+--------------------+--------------------+-------------------+-------------------+
|             -1 |             -2 |             1 |             2 |              -1.25 |              -1.52 |              1.25 |              1.52 |
+----------------+----------------+---------------+---------------+--------------------+--------------------+-------------------+-------------------+
1 row in set (0.00 sec)

小数点位置がマイナスの場合の例を示します。

MariaDB [(none)]> SELECT
    ->     ROUND(1251.23, -2)
    ->    ,ROUND(1515.45, -2)
    -> ;
+--------------------+--------------------+
| ROUND(1251.23, -2) | ROUND(1515.45, -2) |
+--------------------+--------------------+
|               1300 |               1500 |
+--------------------+--------------------+
1 row in set (0.00 sec)


■TRUNCATE(切り捨て)

TRUNCATE 関数は、与えられた数値の指定小数点位置以下の切り捨て処理を行い値を返します。

TRUNCATE 関数は以下の様な引数をとります。

TRUNCATE(X, DP)
-- X : 数値データ(小数点以下ありの正確値、浮動小数点型データなど)
-- DP: 小数点位置(DP がマイナスの場合は小数点から左側の位の大きい方を「0」にする)


それでは、TRUNCATE 関数の使用例を示します。

MariaDB [(none)]> SELECT
    ->     TRUNCATE(1.234, 1)
    ->    ,TRUNCATE(1.987, 1)
    ->    ,TRUNCATE(1.999, 0)
    ->    ,TRUNCATE(-1.999, 1)
    ->    ,TRUNCATE(1234, -2)
    -> ;
+--------------------+--------------------+--------------------+---------------------+--------------------+
| TRUNCATE(1.234, 1) | TRUNCATE(1.987, 1) | TRUNCATE(1.999, 0) | TRUNCATE(-1.999, 1) | TRUNCATE(1234, -2) |
+--------------------+--------------------+--------------------+---------------------+--------------------+
|                1.2 |                1.9 |                  1 |                -1.9 |               1200 |
+--------------------+--------------------+--------------------+---------------------+--------------------+
1 row in set (0.00 sec)

確かに与えられた数値を指定小数点位置以下で切り捨て処理がされた値を返してのが分かります。 (指定小数点位置がマイナスの場合は、小数点位置から上の位を「0」にしているのがわかります。)
また、上の例の様に与えるデータは文字列でも同様の結果が得られます。

MariaDB [(none)]> SELECT
    ->     TRUNCATE('1.234', 1)
    ->    ,TRUNCATE('1.987', 1)
    ->    ,TRUNCATE('1.999', 0)
    ->    ,TRUNCATE('-1.999', 1)
    ->    ,TRUNCATE('1234', -2)
    -> ;
+----------------------+----------------------+----------------------+-----------------------+----------------------+
| TRUNCATE('1.234', 1) | TRUNCATE('1.987', 1) | TRUNCATE('1.999', 0) | TRUNCATE('-1.999', 1) | TRUNCATE('1234', -2) |
+----------------------+----------------------+----------------------+-----------------------+----------------------+
|                  1.2 |                  1.9 |                    1 |                  -1.9 |                 1200 |
+----------------------+----------------------+----------------------+-----------------------+----------------------+
1 row in set (0.01 sec)











PR

コメント

コメントを書く