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

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 的方式进行计算等式的修改后,两种计算获得同样的计算结果

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

本文分享自微信公众号 - AustinDatabases(AustinDatabases)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

『互联网架构』软件架构-mysql终级解决方案分库分表(65)

举例:一个用户表有很多的属性,关联了很多数据,如果放到同一个表里面的话查询是方便了,但是效率不行。

16150
来自专栏Devops专栏

influxDB 常用操作

在influxDB的CLI界面执行precision rfc3339即可,但是显示是UTC的时区,与中国时区差了8个小时,需要在查询语句的最后加上tz('Asi...

47750
来自专栏EAWorld

老焦专栏 | 为什么需要用业务补偿服务和TCC 型服务实现数据一致性

分布式事务解决的问题很明确,就是在服务分布在不同进程、数据分布在不同数据库时,如何解决数据一致性问题。对于这个问题,业界的共识是不要启用数据库 XA 模式,因为...

10830
来自专栏IT技术精选文摘

为什么使用消息队列?消息队列有什么优点和缺点?

其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么?

49430
来自专栏魔王卷子的专栏

django 报错:Error loading MySQLdb module:No module named 'MySQLdb'

我通过查阅文档,说python3需要安装的包已经不是MySQLdb了,而是mysqlclient。那我们就安装这个包了。

49040
来自专栏芋道源码1024

SpringBoot + MyBatis + MySQL 读写分离实战

读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离...

15870
来自专栏移动开发面面观

Spring-boot的jdbc简单实践

Spring-boot 中为我们提供了一套非常简单易用的开发框架,本文将记录Spring-boot 中如何连接MySql。由于笔者是第一次接触后端开发,如有问题...

9330
来自专栏腾讯云数据库(TencentDB)

【迪B课堂】MySQL表空间碎片产生原因和优化

点击上方蓝字每天学习数据库 【迪B课堂】为腾讯云数据库产品经理迪B哥开设的面向数据库开发者、数据库运维人员、云端运维人员的系列培训课程,旨在帮助大家从入门到精...

17240
来自专栏程序生活

大数据入门与实战-SQL基础教程

9030
来自专栏编程坑太多

『互联网架构』软件架构-Sharding-Sphere分库分表(66)

水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为10张表,分别是torder0到torder9,他们的逻辑表名为t_order...

22580

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励