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

如何在SQL Server中获取精确小数位?实现仅保留两位小数的方法咨询

嘿,我来帮你搞定SQL Server里保留两位小数的问题!你的查询结果现在是4.493000,想要得到4.49,有几个简单实用的方法可以试试:

方法1:使用ROUND函数做四舍五入

直接把整个计算结果用ROUND函数包裹,第二个参数设为2,就会自动对第三位小数进行四舍五入:

SELECT ROUND(
    (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w1.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight1 AS w1)
    + (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w2.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight2 AS w2)
    + (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w3.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight3 AS w3),
    2
) AS Party_Weight

这个方法会帮你把4.493变成4.49,完全符合你的需求。

方法2:用CAST/CONVERT转换结果类型

把最终的总和转换成decimal(6,2)类型,系统会自动把多余的小数位截断或四舍五入:

-- 使用CAST的写法
SELECT CAST(
    (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w1.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight1 AS w1)
    + (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w2.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight2 AS w2)
    + (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w3.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight3 AS w3)
AS decimal(6,2)) AS Party_Weight

-- 使用CONVERT的写法
SELECT CONVERT(decimal(6,2),
    (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w1.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight1 AS w1)
    + (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w2.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight2 AS w2)
    + (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w3.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight3 AS w3)
) AS Party_Weight

如果你的结果可能超过decimal(6,2)的范围(比如总和超过9999.99),可以把精度调大,比如改成decimal(8,2),避免出现溢出错误。

方法3:用FORMAT函数格式化输出(适合字符串展示)

如果你需要把结果格式化成字符串形式(比如显示为"4.49"),可以用FORMAT函数:

SELECT FORMAT(
    (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w1.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight1 AS w1)
    + (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w2.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight2 AS w2)
    + (SELECT ISNULL(SUM(CONVERT(decimal(6,2),w3.Party_Weight))/CONVERT(decimal(6,2),1000),0) FROM weight3 AS w3),
    'N2'
) AS Party_Weight

不过要注意,FORMAT的性能比前两种方法稍差,大数据量查询时优先用前两种。

额外建议:简化你的原查询

其实你可以把三个子查询合并成一个,逻辑更清晰也更好维护:

SELECT ROUND(
    ISNULL(SUM(CONVERT(decimal(6,2), Party_Weight))/1000, 0),
    2
) AS Party_Weight
FROM (
    SELECT Party_Weight FROM weight1
    UNION ALL
    SELECT Party_Weight FROM weight2
    UNION ALL
    SELECT Party_Weight FROM weight3
) AS combined_weights

内容的提问来源于stack exchange,提问作者user11974227

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:57:42