前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >4种databases (PMSO) 在精度计算中的问题解决

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

作者头像
AustinDatabases
发布2019-06-21 16:38:39
7360
发布2019-06-21 16:38:39
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

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

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

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

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

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

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

则解决的方法有两个

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档