求高手!乘除运算中数字先后顺序也影响计算结果??诡异

Actan 2011-02-12 11:16:36
计算的公式如下:

写法1: prod_discount * bundlePrice/ord_prodamt*unitPrice/bundleStorePriceTotal

各个值为:

51.00 * 5500.00/8800.00*2200.00/5500.00

写法2: bundlePrice*unitPrice/ord_prodamt/bundleStorePriceTotal * prod_discount

各个值为:

51.00 * 5500.00/8800.00*2200.00/5500.00

第一种其实是: 51.00 * 5500.00/8800.00*2200.00/5500.00
第二种其实是: 5500.00/8800.00*2200.00/5500.00 * 51.00

这两种写法的区别 只是把 prod_discount 放的位置不同,第一个在最前面, 第二个在最后面。

但是诡异的是计算结果居然是不同的,第一种,放在最前面的计算结果是 12.74,这是错的,因为其实这个公式是 51/4=12.75
是可以整除的,但第二种写法算的结果是对的,结果就是12.75。

我怎么也想不通啊,对于第一种写法,db2为什么会给出12.74呢??

有高人能解释下中吗?

...全文
729 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Actan 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhaojianmi1 的回复:]

为了便于理解,建议把每一步计算结果拿出来看,然后就知道最后的结果了
[/Quote]

正解啊。

我一步一步算了下
算 5500.00/8800.00*2200.00/5500.00 时db2返回的是 0.25,这样写的好处是它没有一点精度问题,
而 第一种写法 算到51.00 * 5500.00/8800.00 时就已经出现精度问题了,正确结果应该是 31.875,但此时db2返回的是31.87

看来还是有差别的

多谢!!
zhaojianmi1 2011-02-12
  • 打赏
  • 举报
回复
为了便于理解,建议把每一步计算结果拿出来看,然后就知道最后的结果了
Actan 2011-02-12
  • 打赏
  • 举报
回复
可是 51/4 是可以整除的啊, 是12.75

再转换精度也不该算错啊

不解……
yangxiao_jiang 2011-02-12
  • 打赏
  • 举报
回复
应该是在计算过程中进行精度转换了。
zhaojianmi1 2011-02-12
  • 打赏
  • 举报
回复
小数位会有差异

5,889

社区成员

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

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