雪上加霜的 MySQL 浮点类型 ( float 和 double )

作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题


代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等


联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

在 MySQL 中,有一条忠告,就是 「 不要使用浮点类型,不要使用浮点类型,不要使用浮点类型 」,如果真要使用,那么也请使用 DECIMAL 类型。

为什么呢 ?

因为浮点类型的值是 「 近似 」精度,而且,因为它们都有使用 4 或 8 字节存储,而会带来另一些往往想不到的雪上加霜的问题。

近似值的浮点类型

浮点数有时会引起混淆,因为它们存储的是近似值而不是精确值,这就可能直接导致了在 SQL 语句中写入的浮点值可能与内部存储的值不同。

另一方面,在比较操作中,尤其是想等于操作 ( = ),尝试将浮点值视精确值可能会导致问题。

更惨的是,它们还受平台或实现依赖性的影响。

因为 FLOAT 和 DOUBLE 数据类型受这些问题的影响,所以, MySQL 推出了更好的数据类型 DECIMAL

对于 DECIMAL 列,MySQL 执行的是精度为 65 位十进制数的操作,这可以解决最常见的不准确问题。

下面的范例,使用 DOUBLE 演示浮点运算是如何受浮点错误的影响

    mysql> DROP TABLE IF EXISTS t1;
    
    mysql> CREATE TABLE t1 (i 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值