用 double 類型計算最后結(jié)果為什么會有一點差距
double??money(int?s,int?t) { ???double???M=13; ?????M+=1; ????if?(s<3) ????{return?M;} ????double??permile=2.3; ???? ????if(t>=23||t<5) ????{ ?????????permile*=1.2; ????} ????M+=(s-3)*permile; ????return?M; } int?main() { ????double??cost=money(12,9)+money(12,18); ???? ????printf("小明每天的打車費為%f\n",cost); ????return?0; }
2019-11-04
因為double類型是以二進(jìn)制形式儲存的, 轉(zhuǎn)換成十進(jìn)制時只能做近似的轉(zhuǎn)換,即使是一個確定值,他在做轉(zhuǎn)換的時候也可能產(chǎn)生誤差,因為并不是每一個十進(jìn)制的小數(shù)都能用二進(jìn)制表示。例如0.3你就無法用一個二進(jìn)制數(shù)表示出來。
對于此問題,最好的辦法是:由于已知人民幣一般用元角分計算,便限制只輸出兩位小數(shù),用%.2f