日期:2014-05-18  浏览次数:20564 次

高手請進,爲什麽翻來覆去的計算就是不對呢
我在數據庫里遇到如下的情況
SELECT CAST (124131.28*1.57/100 AS DECIMAL(18,2)) ---得到結果:1948.86
SELECT CAST(1948.86*100/1.57 AS DECIMAL(18,2))---得到的結果:124131.21
相差了0.07 導致最後系統結帳失敗!
求高人指點這是爲什麽?用什麽方法才能不出現誤差?


------解决方案--------------------
SQL code
SELECT CAST (124131.28*1.57/100 AS DECIMAL(18,4)) ---得到結果:1948.86
SELECT CAST(1948.8611*100/1.57 AS DECIMAL(18,3))---得到的結果:124131.21


---------------------------------------
1948.8611

(1 行受影响)


---------------------------------------
124131.280

(1 行受影响)

------解决方案--------------------
SQL code

SELECT CAST (124131.28*1.57/100 AS DECIMAL(18,4)) 
SELECT CAST(1948.86*100/1.57 AS DECIMAL(18,4))

------解决方案--------------------
数据库只是用来存数据,在数据库里面计算很多时候很难精确

建议把数据中的数据提出到程序中进行计算。

原因参考:
http://blog.csdn.net/coleling/article/details/6406904
------解决方案--------------------
SQL code

SELECT CAST (124131.28*1.57/100 AS DECIMAL(18,4)) 
SELECT CAST(1948.86[b]11[/b]*100/1.57 AS DECIMAL(18,4))
结果为:
(无列名)
1948.8611
(无列名)
124131.2803

------解决方案--------------------
保存成分数就精确了