首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >T-SQL小数除法精度

T-SQL小数除法精度
EN

Stack Overflow用户
提问于 2009-01-08 11:15:02
回答 4查看 52.6K关注 0票数 28

有人知道为什么使用SQLServer 2005吗?

代码语言:javascript
复制
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999)

给我11.74438969709659,

但是当我将分母的小数位数增加到15位时,我得到的答案就不那么准确了:

代码语言:javascript
复制
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,15),12499999.9999)

给我11.74438969美元

EN

回答 4

Stack Overflow用户

发布于 2009-04-03 10:02:19

简而言之,使用DECIMAL(25, 13 )就可以完成所有的计算--你会像声明的那样精确:小数点前12位,小数点后13位。规则是: p+s必须等于38,这样你就安全了!为什么会这样呢?因为SQL Server中的算法实现非常糟糕!在他们解决这个问题之前,请遵守这条规则。

票数 19
EN

Stack Overflow用户

发布于 2009-12-07 21:45:42

我注意到,如果你将除法值转换为浮点数,它会给出正确的答案,即:

代码语言:javascript
复制
select 49/30                   (result = 1)

会变成:

代码语言:javascript
复制
select 49/cast(30 as float)    (result = 1.63333333333333)
票数 15
EN

Stack Overflow用户

发布于 2009-01-08 11:56:47

转换表达式而不是参数。

代码语言:javascript
复制
select  CONVERT(DECIMAL(38,36),146804871.212533 / 12499999.9999)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/423925

复制
相关文章

相似问题

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