首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >小数除以小数,得到零。

小数除以小数,得到零。
EN

Stack Overflow用户
提问于 2014-01-16 17:52:28
回答 2查看 161关注 0票数 3

为什么当我这么做:

代码语言:javascript
运行
复制
select CAST(1 AS DECIMAL(38, 28))/CAST(1625625 AS DECIMAL(38, 28))

我得到0,但当我得到

代码语言:javascript
运行
复制
select CAST(1 AS DECIMAL(20, 10))/CAST(1625625 AS DECIMAL(20, 10))

我得到了价值吗?

我原以为高精度的除法会得到更高的精度结果,为什么不是这样呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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时,相应的标度减小,以防止结果的积分部分被截断。

票数 3
EN

Stack Overflow用户

发布于 2014-01-16 18:26:48

作为一种替代方法,您可以始终这样做。

代码语言:javascript
运行
复制
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放在两个部分中的一个上,它将被视为整数除法,并且唯一的结果将被转换为十进制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21169231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档