在計算機中,我們都知道0.1+0.2
是不等於0.3
的
那等於多少呢?我們使用程式測試一下
#include<iomanip>
int main(){
std::cout<<std::setprecision(18)<<0.1+0.2;
return 0;
}
//out: 0.30000000000000004
還有一個專門以此當域名的網站Floating Point Math
在十進位制系統中,10
的質因數為2
和5
若一個分數使用基數10的質因數來表示,則可以精確表示
1/2
1/4
1/5
1/8
1/10
在二進位制系統中,2
的質因數為2
若一個分數使用基數2的質因數來表示,則可以精確表示
1/2
1/4
1/8
而1/5
和1/10
則是無限迴圈的小數
所以若需要表示0.1
這樣的小數時,計算機會使用近似值
這個近似值是透過將無限迴圈的二進位制小數轉換為有限位數的浮點數來實現
在計算機中,二進位制浮點數採用IEEE 754的標準格式來表示
十進位制數0.1的二進位制形式
十進位制數0.2的二進位制形式
十進位制數0.875的二進位制形式
使用乘2取整法,都是無限的數
解決方法
小數先轉整數
1.相加後再轉回小數
(0.1*10+0.2*10)/10
2.使用tofixed()方法