当前位置: 代码迷 >> Sql Server >> SQL Server2008 回到计算结算不对
  详细解决方案

SQL Server2008 回到计算结算不对

热度:285   发布时间:2016-04-24 10:43:43.0
SQL Server2008 返回计算结算不对
Create Table #tmp(
Ration Decimal(28,10) null
,convertfirst Decimal(28,10) null
,scraprate Decimal(28,10) null
)
Insert Into #tmp (Ration ,convertfirst ,scraprate ) values (0.0033 , 1000 , 0 )

select  Ration/ convertfirst * ( 1 + ISNULL(  scraprate , 0 ) )
 from #tmp

返回是 0.000003
正确的应该是:0.0000033
哪位高手清楚原因,或上面公式应该怎么写才可以
------解决方案--------------------
http://blog.csdn.net/coleling/article/details/6406904

参考这篇文章

你可以看一下乘法时的结果精度是如何确定的

解决方法,如果scraprate Decimal(28,10)可以不需要这么高的精度可以降低,如
[code=sql][/DROP TABLE #tmp
Create Table #tmp(
 Ration Decimal(28,10) null
 ,convertfirst Decimal(28,10) null
 ,scraprate Decimal(10,9) null
 )
 Insert Into #tmp (Ration ,convertfirst ,scraprate ) values (0.0033 , 1000 , 0 )

select  Ration/ convertfirst * ( 1 + ISNULL(  scraprate , 0 ) )
  from #tmpcode]

------解决方案--------------------
DROP TABLE #tmp
Create Table #tmp(
 Ration Decimal(28,10) null
 ,convertfirst Decimal(28,10) null
 ,scraprate Decimal(10,9) null
 )
 Insert Into #tmp (Ration ,convertfirst ,scraprate ) values (0.0033 , 1000 , 0 )

select  Ration/ convertfirst * ( 1 + ISNULL(  scraprate , 0 ) )
  from #tmp
  相关解决方案