```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)
![double](https://img-blog.csdnimg.cn/20190626212200447.png)
## 疑问
单精度和双精度计算还是有些不一样
```java
0.2f = 0.2
0.2d = 0.20000000298023224
```
*****
文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦~!~!
想阅读作者的更多文章,可以查看我 [个人博客](http://dandanlove.com/) 和公共号:![振兴书城](https://imgconvert.csdnimg.cn/aHR0cDovL3VwbG9hZC1pbWFnZXMuamlhbnNodS5pby91cGxvYWRfaW1hZ2VzLzEzMTk4NzktNjEyYzRjNjZkNDBjZTg1NS5qcGc?x-oss-process=image/format,png)
- 写在前面的话
- Java
- 基础
- Double的比较
- 小数怎么用二进制表示
- 多线程
- 并发和并行
- 线程池
- 线程池背景
- 线程池构造
- 任务阻塞队列
- Flutter
- 基础知识
- Dart基础
- Android
- 项目架构
- View
- 非UI线程更新View
- AlarmManager
- 对比postDelaryed和Timer
- Bitmap
- 加载100M的图片却不撑爆内存
- Bitmap压缩
- Bitmap局部解码
- 计算图片的内存占用
- Android动画
- Android动画类型
- Android动画原理
- 属性动画
- 帧动画
- 补间动画
- 使用动画的注意事项
- Android新特性
- 权限组
- Android23(Marshmallow)-6.0
- Android24(Nougat)-7.0
- Android26(Oreo)-8.0
- Android28(Pie)-9.0
- Android29(Q)-10.0
- AndroidX迁移
- Kotlin
- 关键字
- Kotlin操作符
- CoroutineScope
- Flow
- CoroutineException