TRUNCATE関数とPOWER関数で小数点第2位まで四捨五入
SQLで小数点第2位まで四捨五入する方法
ROUND関数は、数値を指定された桁数で四捨五入します。小数点第2位まで四捨五入するには、以下のように記述します。
SELECT ROUND(数値, 2);
例:
SELECT ROUND(3.1415926535, 2);
出力:
3.14
TRUNCATE関数とPOWER関数を使う
TRUNCATE関数は、数値を指定された桁数で切り捨てます。POWER関数は、10を指定された乗数だけ累乗します。これらの関数を組み合わせることで、小数点第2位まで四捨五入することができます。
SELECT TRUNCATE(数値 * POWER(10, 2)) / POWER(10, 2);
SELECT TRUNCATE(3.1415926535 * POWER(10, 2)) / POWER(10, 2);
3.14
どちらの方法も小数点第2位まで四捨五入することができますが、ROUND関数のほうがシンプルで分かりやすいので、一般的にはこちらの方がよく使われます。
注意点
- ROUND関数とTRUNCATE関数は、データベースによって引数の順序が異なる場合があります。使用するデータベースのマニュアルを確認してください。
- 四捨五入の処理は、データベースの設定によって異なる場合があります。詳細は、データベースの設定を確認してください。
小数点の処理に関するその他の関数については、以下の資料を参照してください。
ROUND関数を使う
-- テーブル作成
CREATE TABLE test (
id INT,
value DECIMAL(10,2)
);
-- データ挿入
INSERT INTO test (id, value) VALUES (1, 3.1415926535);
INSERT INTO test (id, value) VALUES (2, 123.4567890);
-- 小数点第2位まで四捨五入
SELECT id, ROUND(value, 2) AS rounded_value FROM test;
id | rounded_value
------- | --------
1 | 3.14
2 | 123.46
TRUNCATE関数とPOWER関数を使う
-- テーブル作成
CREATE TABLE test (
id INT,
value DECIMAL(10,2)
);
-- データ挿入
INSERT INTO test (id, value) VALUES (1, 3.1415926535);
INSERT INTO test (id, value) VALUES (2, 123.4567890);
-- 小数点第2位まで四捨五入
SELECT id, TRUNCATE(value * POWER(10, 2)) / POWER(10, 2) AS rounded_value FROM test;
id | rounded_value
------- | --------
1 | 3.14
2 | 123.46
補足
上記のサンプルコードでは、DECIMAL型を使用していますが、FLOAT型やDOUBLE型でも同様に処理できます。
また、WHERE句などで条件を指定して、特定の値のみ四捨五入することもできます。
SELECT id, ROUND(value, 2) AS rounded_value FROM test WHERE value > 100;
このクエリは、value列の値が100より大きいもののみ小数点第2位まで四捨五入します。
小数点第2位まで四捨五入する他の方法
CASE式を使うと、条件によって四捨五入の処理を切り替えることができます。
SELECT id,
CASE
WHEN value >= 0.5 THEN TRUNCATE(value * POWER(10, 2)) / POWER(10, 2)
ELSE TRUNCATE((value - 0.01) * POWER(10, 2)) / POWER(10, 2)
END AS rounded_value
FROM test;
このクエリは、value列の値が0.5以上の場合、0.5を加算してから切り捨てて四捨五入します。0.5未満の場合、0.01を減算してから切り捨てて四捨五入します。
FLOOR関数とCEIL関数を使うと、小数点以下を切り捨てて整数部分を取得することができます。これらの関数を組み合わせることで、小数点第2位まで四捨五入することができます。
SELECT id,
(FLOOR(value * POWER(10, 2)) + CEIL(value * POWER(10, 2)) - 1) / POWER(10, 2) AS rounded_value
FROM test;
このクエリは、value列の値を100倍してから切り捨てと切り上げを行い、その差を100で割って小数点第2位まで四捨五入します。
自作関数を使う
上記の方法でうまくいかない場合、自作関数を使うこともできます。
DELIMITER //
CREATE FUNCTION round_to_two_decimal_places(value DECIMAL(10,2)) RETURNS DECIMAL(10,2)
BEGIN
DECLARE rounded_value DECIMAL(10,2);
IF value >= 0.5 THEN
SET rounded_value = TRUNCATE(value * POWER(10, 2)) / POWER(10, 2);
ELSE
SET rounded_value = TRUNCATE((value - 0.01) * POWER(10, 2)) / POWER(10, 2);
END IF;
RETURN rounded_value;
END;
//
SELECT id, round_to_two_decimal_places(value) AS rounded_value FROM test;
このクエリは、自作関数 round_to_two_decimal_places
を使って小数点第2位まで四捨五入します。
小数点第2位まで四捨五入するには、いくつかの方法があります。どの方法を使うかは、状況によって異なります。
sql rounding