You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:53:11