我有一個小問題,我找不到解決方案!我的代碼是(這只是一個示例代碼,但是我的原始代碼做了這樣的事情):float x = [@"2.45" floatValue];for(int i=0; i<100; i++) x += 0.22;NSLog(@"%f", x);輸出是52.450001而不是52.450000!我不知道,因為這會發生!謝謝你的幫助!?解決了?謝謝大家!是的,我已經解決了雙重類型!
3 回答

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
浮點數是具有一定精度的數字表示形式。并非每個值都可以用這種格式表示。也請參見這里。
您可以輕松想到為什么會這樣:僅在間隔(1..1)中有無限數量的數字,但是浮點數僅具有有限的位數來表示(-MAXFLOAT .. MAXFLOAT)。
更恰當地說:在32位整數表示中,要表示的整數個數是可數的,但是有無限數量的實數值,不能在32位或64位的有限表示中完全表示。因此,不僅最高和最低可表示的實際值受到限制,而且準確性也受到限制。
那么,為什么浮點數后的數字很少會受到影響?因為表示形式是基于二進制而不是十進制,所以使其他數字比十進制數字更容易表示。

動漫人物
TA貢獻1815條經驗 獲得超10個贊
浮點數不能始終由計算機輕松表示。這導致某些數字不準確。
就像我問你十進制的1/3是多少。無論您多么努力,您都無法告訴我它是什么,因為十進制無法準確地描述該數字。
浮點數無法準確描述一些十進制數字。
- 3 回答
- 0 關注
- 472 瀏覽
添加回答
舉報
0/150
提交
取消