SQL
2. ROUND は四捨五入。銀行丸めじゃない(float はもっと危ない)
出典: SQL Server の ROUND で金額計算がズレる3つの罠 — 丸め方向・負の桁・暗黙の切り捨て — 2. ROUND は四捨五入。銀行丸めじゃない(float はもっと危ない)
-- float は 2.675 を正確に表現できないことがある
SELECT ROUND(CAST(2.675 AS float), 2); -- 2.67(誤差で 2.675 が 2.6749… 扱い)
-- decimal なら正確
SELECT ROUND(CAST(2.675 AS decimal(10,3)), 2); -- 2.680(正しく切り上げ)
▸ 実行ボタンで結果を表示
Source収録記事
この snippet は記事の「2. ROUND は四捨五入。銀行丸めじゃない(float はもっと危ない)」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
2 件-- 0.5/1.5/2.5 を四捨五入。リテラル 0.5 は桁が足りず overflow するので CAST で桁を確保 SELECT ROUND(CAST(0.5 AS decimal(2,1)), 0) -- 1.0 , ROUND(CAST(1.5 AS decimal(2,1)), 0) -- 2.0 , ROUND(CAST(2.5 AS decimal(2,1)), 0); -- 3.0
▶ 実行可
2. ROUND は四捨五入。銀行丸めじゃない(float はもっと危ない)
#69061412ae1f
-- 金額は decimal で。消費税8%を計算 SELECT CAST(1000 AS decimal(12,2)) * 0.08; -- 80.0000 -- 表示桁を金額の2桁に揃えるなら、結果も明示的に丸める SELECT CAST(CAST(1000 AS decimal(12,2)) * 0.08 AS decimal(12,2)); -- 80.00
▶ 実行可
3. INT同士の除算は、ROUNDより先に切り捨てられる
#a1a355ce9afe
