```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):尾數部分;


## 疑問
單精度和雙精度計算還是有些不一樣
```java
0.2f = 0.2
0.2d = 0.20000000298023224
```
*****
文章到這里就全部講述完啦,若有其他需要交流的可以留言哦~!~!
想閱讀作者的更多文章,可以查看我 [個人博客](http://dandanlove.com/) 和公共號:
- 寫在前面的話
- 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