SQL:如何实现浮点数第三位小数≥5时向上保留两位小数
浮点数两位小数舍入解决方案(第三位小数≥5时向上舍入)
问题核心原因
你遇到的问题源于float类型的近似存储特性:像5.085这类小数无法被二进制浮点数精确表示,实际存储的数值略小于5.085,导致ROUND(@i, 2)返回5.08,不符合你预期的舍入规则。
解决方案
方案1:转精确类型后用ROUND函数
先将float转换为DECIMAL(精确数值类型)保证精度,再执行舍入操作:
DECLARE @i float SET @i = 5.085 SELECT ROUND(CAST(@i AS DECIMAL(18, 3)), 2) AS [Result]
方案2:用CEILING实现向上舍入
同样先转DECIMAL,通过乘法放大、取上限、除法还原的方式完成精准向上舍入:
DECLARE @i float SET @i = 5.085 SELECT CEILING(CAST(@i AS DECIMAL(18, 3)) * 100) / 100 AS [Result]
全用例验证代码
以下代码可验证你给出的所有测试数值:
DECLARE @testData TABLE (OriginalValue float, ExpectedResult DECIMAL(18,2)) INSERT INTO @testData VALUES (5.085, 5.09), (15.085, 15.09), (110.4646, 110.46), (110.4656, 110.47) SELECT OriginalValue, ExpectedResult, ROUND(CAST(OriginalValue AS DECIMAL(18,3)), 2) AS ActualResult FROM @testData
执行后所有ActualResult会与ExpectedResult完全匹配。
内容的提问来源于stack exchange,提问作者Umut K
相关产品推荐
相关产品推荐

