php 读取mysql的double类型小数点不对

最近用php读取浮点型数据的时候遇到了一个bug。
数据库采用的是以double类型存储的浮点型数据。
在这里插入图片描述
但使用php不对数据采取任何处理后读取出来后数据却发生了变化
在这里插入图片描述
上网查询资料后,使用了decimal 类型存储后恢复正常,如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
并发现mysql的float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不正确的结果。单精度类型float和双精度类型double在计算机中存储的时候,由于计算机只能存储二进制,所以浮点型数据在存储的时候,必须转化成二进制。
而对于float类型的数据,只分配了32位的存储空间,对于double类型值分配了64位,但是并不是所有的实数都能转成32位或者64位的二进制形式,如果超过了,就会出现截断,这就是误差的来源。

针对float情况,至少我们可以得出结论:

  1. 如果一个float型数据转成二进制后的第32位之后都是0(double 为64位),那么数据是准的
  2. 如果一个float型数据转成二进制后的第32位之后不全为0(double 为64位),则数据就会存在误差

下面贴上资料地址
MySQL如何选择float, double, decimal

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值