0
点赞
收藏
分享

微信扫一扫

4种databases (PMSO) 在精度计算中的问题解决

4种databases (PMSO) 在精度计算中的问题解决_oracle

1  Oracle 中的计算,不同的位置的计算会造成最终的结果不同的问题,请见下图

4种databases (PMSO) 在精度计算中的问题解决_oracle_02

2 官方给出的解答是,直接计算会返回不具有IEEE 754 方式的四舍五入的浮点算法。

3 官方推荐的正确计算方式是,添加 to_number的方式,来进行相关的数值计算后,
在进行四舍五入的计算,这样获得的值,则不会像上面一样,会有different values 的
存在。

4种databases (PMSO) 在精度计算中的问题解决_mysql_03

4 这样的问题在 SQL SERVER 中存在不存在,答案是存在,并且更难搞
首先我们照搬上面的计算,图中很清楚的看到,结果和ORACLE 不同如初一辙

4种databases (PMSO) 在精度计算中的问题解决_postgresql_04

我们按照惯性思维的方式,我们用ORACLE 同样的方式来处理看看结果怎么样

4种databases (PMSO) 在精度计算中的问题解决_oracle_05

结果和ORACLE 不同,即使使用双精度的数字进行计算还是造成计算顺序不同,而值不同的情况,

则解决的方法有两个

方法1  多添加保留位,在图中我们可以看到,结果是一致的,但我想很多开发的同学都不大会满意

4种databases (PMSO) 在精度计算中的问题解决_oracle_06

方法2 使用menoy类型来进行变换,结果是一致的

4种databases (PMSO) 在精度计算中的问题解决_postgresql_07

那如果此种情形发生在MYSQL 数据库中呢?
同样 MYSQL 中存在同样的问题

4种databases (PMSO) 在精度计算中的问题解决_mysql_08

这里MYSQL的处理方式稍微不同,虽然我们添加了 decimal 但如果还是保留2位小数,则结果还是不对,这里比需要的值多保留一位,则结果就一致了。

4种databases (PMSO) 在精度计算中的问题解决_mysql_09

最后,PostgreSQL 怎么来进行下面的事情

在众多的数据库中,只有POSTGRESQL 给出了事情的真相,顺序不同计算的结果是不同的

4种databases (PMSO) 在精度计算中的问题解决_oracle_10

在Postgresql 中可以通过类似MYSQL 的方式进行计算等式的修改后,两种计算获得同样的计算结果

4种databases (PMSO) 在精度计算中的问题解决_mysql_11

或许还有更多的方法,如果有还请不吝赐教

举报

相关推荐

0 条评论