2016-09-12 70 views
-2

在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?

+0

赤我的答案。 –

+1

您在編程語言中混淆了調試器。在你太失望之前,檢查一下std :: setprecision實際上做了什麼。而且,由於您正在查看調試器,您絕對不想改變您看到的內容,因爲這隻能隱藏錯誤。 – gnasher729

+0

[程序員應該知道什麼關於浮點運算](http://floating-point-gui.de/) – Sulthan

回答

-1

PLZ使用

 double A = 0.0500000007; 
     NSString *b =[NSString stringWithFormat:@"$%.02f",A] ; 
    double B = [b doubleValue]; 
+0

請不要。如果您將數字放入標籤中,請使用支持本地化的格式化程序。 – Sulthan

+0

@Sulthan他需要0.05的結果。這是什麼錯誤。 –

+0

對於很多人來說,結果應該是'0,05'或其他適當的格式。使用'NSNumberFormatter'來格式化適合用戶的語言環境的數字。 – rmaddy

0

您可以使用NSNumberFormatter以各種各樣的方式來格式化對象---太多在這裏列出,請參閱可從Xcode中的文檔。另請參閱數據格式指南。

2

浮點數字是二進制浮點數字。 0.05不能完全由二進制浮點數表示。結果不可能精確到0.05。

此外,你是毫無意義地使用float而不是double。浮點數只有六位或七位精度。除非你有一個很好的理由可以解釋,否則使用double,這會給你大約15個數字的精度。你仍然無法得到0.05,但錯誤會少得多。

0

您必須在%modulo運算符及其identifierf之間進行更改才能獲得所需的結果。

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 
+0

不要使用'stringWithFormat'。使用'NSNumberFormatter',以便在用戶的語言環境中正確格式化數字。 – rmaddy