单精度和双精度是我们在 mysql 中定义数据时候的两个常见类型,那么单精度和双精度数据有什么区别,我们今天就来研究下。
单精度
首先单精度和双精度都是用来表示数字的。单精度用 float 来表示。一个单精度的数字的大小占 4 个 bytes。中文名称叫字节。是计算机技术用于计量存储容量的一种计量单位。
一个字节存储 8 位无符号数。存储的数值范围为0-255。
一个字节需要 8 位的内存空间储存。
单精度这边要 4 个字节,也就是 32 位来表示的数字。就非常的大了。
这里不光可以表示正数,也可以表示负数。
表示形式为 1 位符号位,8 位指数,这个指数位有些地方称为阶码,都是一个意思。23 位小数,这里有的地方也称为尾数 23 位,也是一个意思。
单精度可以表示的数值范围为-3.4E38~3.4E38。 这里 E 指的是 10 的多少次方,所以单精度能表示的数字已经非常大了。
比如 2.4E38 值得是 3.4 乘以 10 的 38 次方。
双精度
理解了单精度,双精度就好理解了。都是对应的。
双精度用 double 来表示。所谓双精度就是它一个数字所占用的存储空间是单精度的 2 倍。也就是用 8 个字节,64 位的存储空间来存储一个浮点数。
双精度有 符号位 1 个,指数位 11 位,小数位 52 位。
表示的数字范围大约是-2.23E 308 ~ 1.79E308.
十进制下的位数不同
单精度浮点数最多有 7 位十进制有效数字,如果某个数字有效数字位数超过 7 位,当把它定义位单精度变量时,超出的部分会自动四舍五入。
双精度浮点数可以表示十进制的 15 或者 16 位有效数字,超出的部分也会自动四舍五入。