ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
```java double a = 3.2222222222222221; double b = 3.2222222222222222; ``` > `a==b` true; > `a<b` false; > `print(a)` 为 `3.2222222222222223`; > `print(b)` 为 `3.2222222222222223`; 因为 `a` 和 `b` ,在编译为`class`文件的时候就已经做了转化; 末尾的1,2,3,4,5会都变成3,6,7,8,9都会变成8。 ## 通常 - `float` 可以保证十进制科学计数法小数点后6位有效精度和第7位的部分精度。 - `double` 可以保证十进制科学计数法小数点后15位有效精度和第16位的部分精度。 其实不论是 `float` 还是 `double` 在存储方式上都是遵从 `IEEE` 的规范的,`float`遵从的是`IEEE R32.24`,而 `double` 遵从的是 `R64.53`。 > 无论是单精度还是双精度在存储中都分为三个部分: 1. 符号位(`Sign`): 0代表正,1代表为负; 2. 指数位(`Exponent`):用于存储科学计数法中的指数数据,并且要加上偏移量(`float偏移127,double偏移量1023` ,避免出现负值); 3. 尾数部分(Mantissa):尾数部分; ![float](https://img-blog.csdnimg.cn/20190626212200425.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly94aWV4dWVqaWFuLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70) ![double](https://img-blog.csdnimg.cn/20190626212200447.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly94aWV4dWVqaWFuLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70) ## 疑问 单精度和双精度计算还是有些不一样 ```java 0.2f = 0.2 0.2d = 0.20000000298023224 ``` ***** 文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦~!~! 想阅读作者的更多文章,可以查看我 [个人博客](http://dandanlove.com/) 和公共号:![振兴书城](https://imgconvert.csdnimg.cn/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzEzMTk4NzktNjEyYzRjNjZkNDBjZTg1NS5qcGc?x-oss-process=image/format,png)