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

SQL Server如何实现Decimal计算结果的19位精确小数精度?

解决SQL Server中Decimal运算精度丢失问题

问题根源在于:SQL Server对Decimal类型的运算遵循内置精度规则,直接用Decimal(11,2)字段运算时,中间结果的小数位数不足以支撑19位精确值,后续转换为Decimal(31,19)只能补0填充,无法还原丢失的精度。

正确做法是先将参与运算的字段转换为更高精度的Decimal类型,再执行运算,让运算过程保留足够精度,最终得到你需要的19位小数结果。

示例SQL语句:

-- 使用CAST实现
SELECT CAST(
    (CAST(Field1 AS DECIMAL(31,19)) + CAST(Field2 AS DECIMAL(31,19))) 
    / CAST(Field3 AS DECIMAL(31,19)) 
AS DECIMAL(31,19)) AS FinalNumber;

-- 或使用CONVERT实现
SELECT CONVERT(DECIMAL(31,19),
    (CONVERT(DECIMAL(31,19), Field1) + CONVERT(DECIMAL(31,19), Field2)) 
    / CONVERT(DECIMAL(31,19), Field3)
) AS FinalNumber;

测试你的数据(Field1=0.00,Field2=94777.58,Field3=223000.00),用上述语句计算后会得到精确的0.4250115695067264573。

补充说明:
SQL Server中Decimal类型的运算精度由系统规则自动计算,当原始字段精度较低时,中间运算结果的小数位会被截断或限制,后续转换无法恢复精度。提前转换为高精度类型可让运算在足够精度范围内执行,避免丢失有效小数位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:54:57