关于计算精度的问题

lookat800 2008-11-25 02:57:40
今天遇到个棘手的问题,就是用5位的decimal型减double型结果出乎我的意料0.9394899999999991
正常人计算都知道是0.93949.
请高手解答为什么~
不要笼统的答哦~
...全文
81 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lookat800 2008-11-28
  • 打赏
  • 举报
回复
关键是现在我做的是datastage,我用datastage算出来的是正确的值,db2 run出来的和datastage不一样,不能和客户交差~~
Mr_Bean 2008-11-28
  • 打赏
  • 举报
回复
这个地确是2楼所说的问题 如果一定要一致就采取强制转化的方法
xiongxiao 2008-11-27
  • 打赏
  • 举报
回复
lz, 都说了只要有float或double这样类型的东西参与计算就会出现你说的那种情况,一般来说完全可以用dec类型代替float或double
xiongxiao 2008-11-26
  • 打赏
  • 举报
回复
避免这种计算问题,在设计阶段应该不要使用float与double这些浮点类型的字段或变量,否则结果就会象楼主你自己说的一样变得不可预测

浮点类型的计算在电脑中会存在精度表示问题,很有可能1.00也会变成0.9999999999999999
lookat800 2008-11-26
  • 打赏
  • 举报
回复
搞这个问题弄了一个星期了 ~~ 哭
lookat800 2008-11-26
  • 打赏
  • 举报
回复
declare @dec decimal(5,5)
declare @dbl float

select @dec=6.81664,@dbl=5.87715
select @dec-@dbl,cast(@dec-@dbl as decimal(5,5))
二楼的同志你算下这个
xiguofeng 2008-11-25
  • 打赏
  • 举报
回复

declare @dec decimal(5,2)
declare @dbl float

select @dec=222.22,@dbl=123.2333223
select @dec-@dbl,cast(@dec-@dbl as decimal(5,2))
---------------------- ---------------------------------------
98.9866777 98.99

(1 行受影响)

减去一个浮点型的小数,应该向浮点数最多的匹配

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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