使用Navicat存float类型的小数

问题描述

使用navicat存储一个float类型的小数,添加字段后,其余的保持默认设置。html

clipboard.png

而后存一条数据,float类型的数据为129364.57。保存后的结果:mysql

clipboard.png

舍弃了小数部分,而后四舍五入为129365sql

而后又从新试了几个其余的小数,发现都是这个状况。测试

猜想

1.联想到之前学C语言的时候,不一样数据类型所占长度不一样,因此就猜想多是精度不够了。google

由于是二进制,因此在存储小数的时候只能有2的负n次幂这样的相加得出的小数,因此我就试一下129364.25,依然不行,仍是没有小数部分,只有整数部分,而且一样知足四舍五入。spa

因此不是精度的问题。设计

2.既然没有小数,是否是默认没有小数部分呢。3d

而后从新设计表,发现果真小数部分为0,而后将其改成2:code

clipboard.png

再从新测试:htm

clipboard.png

正常保存!

后续

google了一下网上的答案,发现有对存储长度的限制,而后就去官方文档看了看。

标题就很能说明问题

clipboard.png

估计值。感受官方文档并无说什么东西,可是咱们知道了float的估计是有长度和精度两个参数控制的。而后再结合google的结果,发现float只支持8位,当整数加小数部分超出8位,它就开始估计了。

固然也不是说全部的8位均可以,也是有个范围的,由于float使用4个字节,因此当数值大小超过65536(2的16次方),即便八位数也是会出现估计的现象。好比咱们存一个65536.777,可是保存后结果确不是这个数:

clipboard.png

总结

1.小于65536,8位之内数字正常显示;超出8位进行近似估计(也就是数值不许)。
2.大于65536,接近8位的数字开始估计

相关文章
相关标签/搜索