为什么在SQL Server中,使用Decimal(20,10)返回比Decimal(38,10)更准确的Pi值

3
当在SQL Server中执行以下查询时:
SELECT 
    CAST(22) AS decimal(38, 10) / CAST(7) AS decimal(38, 10) AS pie

输出结果为:3.142857。

但是当我以更低的精度20运行相同的查询时,小数点后面会有更多的值。

SELECT
    CAST(22) AS decimal(20, 10) / CAST(7) AS decimal(20, 10) AS pie

输出结果为:3.142857142857142857。
有人可以解释一下为什么会这样吗?
我在SQL Server中遇到了类似的情况,我需要在将两个 decimal(38, 10) 列相除时获得精确的值,保留10位小数。
问题在于,这两列来自另一个表,在那里它们被定义为 DECIMAL(38, 10)

这个回答解决了你的问题吗?T-SQL十进制除法精度 - GSerg
1个回答

2

有没有办法将这两列转换为20,10以进行计算,以实现10位小数的精度? - i4nk1t
是的。将它们转换为低精度小数或浮点数进行计算。或者更好的方法是减少列的声明精度。 - David Browne - Microsoft
声明的精度不能降低,因为该列是由数据库管理员定义的,我只能创建一个基于它的表值函数或视图。将它们转换为较低的精度会导致错误,提示尝试将数值型转换为数值型数据类型。而浮点数只返回值到小数点后6位。 - i4nk1t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接