使用navicat
存储一个float
类型的小数,添加字段后,其余的保持默认设置。html
而后存一条数据,float
类型的数据为129364.57
。保存后的结果:mysql
舍弃了小数部分,而后四舍五入为129365
。sql
而后又从新试了几个其余的小数,发现都是这个状况。测试
1.联想到之前学C语言的时候,不一样数据类型所占长度不一样,因此就猜想多是精度不够了。google
由于是二进制,因此在存储小数的时候只能有2的负n次幂
这样的相加得出的小数,因此我就试一下129364.25
,依然不行,仍是没有小数部分,只有整数部分,而且一样知足四舍五入。spa
因此不是精度的问题。设计
2.既然没有小数,是否是默认没有小数部分呢。3d
而后从新设计表,发现果真小数部分为0,而后将其改成2:code
再从新测试:htm
正常保存!
google了一下网上的答案,发现有对存储长度的限制,而后就去官方文档看了看。
标题就很能说明问题
估计值
。感受官方文档并无说什么东西,可是咱们知道了float
的估计是有长度和精度两个参数控制的。而后再结合google的结果,发现float
只支持8位
,当整数加小数部分超出8位,它就开始估计
了。
固然也不是说全部的8位均可以,也是有个范围的,由于float
使用4个字节,因此当数值大小超过65536
(2的16次方),即便八位数也是会出现估计
的现象。好比咱们存一个65536.777
,可是保存后结果确不是这个数:
1.小于65536
,8位之内数字正常显示;超出8位进行近似估计
(也就是数值不许)。
2.大于65536
,接近8位的数字开始估计
。