2014-01-13 59 views
0

我正在製作一個計算器應用程序,我正在使用雙精度。我不想顯示額外的零和小數,所以我將佔位符標記更改爲「%.f」。因爲我做了這個,如果我在計算器上做了一個有小數點的問題,他們就不會顯示出來。只在必要時刪除一個雙的尾隨零

我的問題基本上是否有任何方法只有在必要時才使用%.f。如果沒有辦法,你推薦做些什麼來實現它,所以我只在實際需要時使用小數。謝謝。

+0

您可以使用NSDecimalNumber做十進制Calcs(計算),所以他們表現得更像鉛筆和紙張。並且/或者您可以掃描格式化的數字並且「修剪」掉尾隨零(以及小數點,如果合適的話)。 (當然,您可能需要先添加一個「小三角洲」,以避免獲得123.4599998。) –

回答

3

您可能想要使用NSDecimarlNumber,但要回答您的問題,您可以使用NSNumberFormatter來格式化double的輸出。

double someNumber = 1.9; 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
NSLog(@"%@",[formatter stringFromNumber:[NSNumber numberWithDouble:someNumber]]); 

我的輸出

2014年1月13日11:30:41.429 DTMTestApp [23933:907] 1.9

2

對於計算器,請考慮使用NSDecimalNumberNSNumberFormatter的組合。使用浮點會遇到很多問題。考慮:(2/3.000000001)* 3.000000001,結果不一定完全是2.

+0

(但即使NSDecimalNumber也無法正確計算(2/3)* 3 ...) –

+0

@Martin True。實際上'NSDecimalNumber'就像'float'和'double'一樣。 (2/3)* 3是個不好的例子,我在答案中改變了這個例子。 – zaph