高手請進,爲什麽翻來覆去的計算就是不對呢

happyxiaowuge007 2012-01-13 07:55:17
我在數據庫里遇到如下的情況
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 導致最後系統結帳失敗!
求高人指點這是爲什麽?用什麽方法才能不出現誤差?
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2012-01-14
  • 打赏
  • 举报
回复
保存成分数就精确了
q806294478 2012-01-14
  • 打赏
  • 举报
回复

SELECT CAST (124131.28*1.57/100 AS DECIMAL(18,4))
SELECT CAST(1948.8611*100/1.57 AS DECIMAL(18,4))
结果为:
(无列名)
1948.8611
(无列名)
124131.2803
勿勿 2012-01-13
  • 打赏
  • 举报
回复
最好是不要在数据里处理数据。 如果要计算就要多保留几位才能接近。
叶子 2012-01-13
  • 打赏
  • 举报
回复
数据库只是用来存数据,在数据库里面计算很多时候很难精确

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

原因参考:
http://blog.csdn.net/coleling/article/details/6406904
snbxp 2012-01-13
  • 打赏
  • 举报
回复

SELECT CAST (124131.28*1.57/100 AS DECIMAL(18,4))
SELECT CAST(1948.86*100/1.57 AS DECIMAL(18,4))
fanzhouqi 2012-01-13
  • 打赏
  • 举报
回复
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 行受影响)
是你进位问题,看 结果不解释

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧