在C++中,有一個std :: setprecision函數可以設置float/double精度。我如何在Objective-C中設置精度?和這張照片如下:如何在Objective-C中設置精度
(lldb) p 10/200
(int) $0 = 0
(lldb) p (float)10/200
(float) $1 = 0.0500000007
第3行結果是0.0500000007,結果爲什麼是'7'?我怎麼能得到的結果是0.05?
在C++中,有一個std :: setprecision函數可以設置float/double精度。我如何在Objective-C中設置精度?和這張照片如下:如何在Objective-C中設置精度
(lldb) p 10/200
(int) $0 = 0
(lldb) p (float)10/200
(float) $1 = 0.0500000007
第3行結果是0.0500000007,結果爲什麼是'7'?我怎麼能得到的結果是0.05?
您可以使用NSNumberFormatter以各種各樣的方式來格式化對象---太多在這裏列出,請參閱可從Xcode中的文檔。另請參閱數據格式指南。
浮點數字是二進制浮點數字。 0.05不能完全由二進制浮點數表示。結果不可能精確到0.05。
此外,你是毫無意義地使用float而不是double。浮點數只有六位或七位精度。除非你有一個很好的理由可以解釋,否則使用double,這會給你大約15個數字的精度。你仍然無法得到0.05,但錯誤會少得多。
您必須在%
modulo
運算符及其identifier
f
之間進行更改才能獲得所需的結果。
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
%.02f告訴你將被格式化浮動(%f)和,應四捨五入到兩個地方,而應該用0來填充格式。
例子:
%f = 25.000000 // results 25.000000
%.f = 25 // results 25
%.02f = 25.00 // results 25.00
不要使用'stringWithFormat'。使用'NSNumberFormatter',以便在用戶的語言環境中正確格式化數字。 – rmaddy
赤我的答案。 –
您在編程語言中混淆了調試器。在你太失望之前,檢查一下std :: setprecision實際上做了什麼。而且,由於您正在查看調試器,您絕對不想改變您看到的內容,因爲這隻能隱藏錯誤。 – gnasher729
[程序員應該知道什麼關於浮點運算](http://floating-point-gui.de/) – Sulthan