为什么当我这么做:
select CAST(1 AS DECIMAL(38, 28))/CAST(1625625 AS DECIMAL(38, 28))我得到0,但当我得到
select CAST(1 AS DECIMAL(20, 10))/CAST(1625625 AS DECIMAL(20, 10))我得到了价值吗?
我原以为高精度的除法会得到更高的精度结果,为什么不是这样呢?
发布于 2014-01-16 18:17:43
这是因为对于数学运算,结果的精度和比例是根据在http://msdn.microsoft.com/en-us/library/ms190476.aspx#division中找到的规则计算的。
操作 e1 / e2 结果精度 p1 - s1 + s2 + max(6,s1 + p2 + 1) 结果标度 max(6,s1 + p2 + 1)
因此,当对两个部分都使用decimal(38/28)时,以不受支持的decimal(105,67)结束,因此它会被截断。
还引用了的话
结果精度和比例尺的绝对最大值为38。当结果精度大于38时,相应的标度减小,以防止结果的积分部分被截断。
发布于 2014-01-16 18:26:48
作为一种替代方法,您可以始终这样做。
SELECT CONVERT(DECIMAL(38,28), 1 / 1625625.0)
SELECT CONVERT(DECIMAL(10,10), 1 / 1625625.0)
SELECT CONVERT(DECIMAL(38,28), 1.0 / 1625625)
SELECT CONVERT(DECIMAL(10,10), 1.0 / 1625625)所有4个查询都将导致相同的结果。如果您不将.0放在两个部分中的一个上,它将被视为整数除法,并且唯一的结果将被转换为十进制。
https://stackoverflow.com/questions/21169231
复制相似问题