Float Double Decimal 区别
本文介绍 浮点数和定点数的区别,以及float和double的区别
另外介绍了decimal以及使用场景
我们知道, 整数 在计算机内部的表示方法都是2^n + 2^n-1+...+ 2^2 + 2^1 + 2^0.来加起来的
那么 小数 该如何表示呢?
在计算机内部,小数有两种表示方法: 定点数和浮点数
定点数,顾名思义,可以理解为小数点的位置是固定
图中,一共用32位长度来表示一个定点数,其中:
可见总长度一定的情况下,如果整数位的长度越大,能代表的数值范围就越大,但是精度就会越小.
如果小数位的长度越大,代表的数值范围越小,但是精度会变大.
显然, 范围和精度,在计算机内部,是一对天然矛盾体.
浮点数的表示方法,跟科学记数法有点类似.
图中是一个float类型的数字表示
表示方法为 (-1)^s * f * b^e
具体的说,这个实数由一个数 乘以 2 的整数次幂得到
图中
float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:
float:
1bit(符号位) 8bits(指数位) 23bits(尾数位)
double:
1bit(符号位) 11bits(指数位) 52bits(尾数位)
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
那么可以参考 这篇文章
float和double还是二进制的value来表示十进制的数字
但是,decimal本身就是十进制的value,(注意,decimal仍然是个浮点类型)
人类发明的任何概念,比如金融数据和比赛分数,适用于decimal
而其他的一些自然数据,当我们对精度要求不高的时候,可以使用float/double
2023-07-11 广告