我正在製作一個計算器應用程序,我正在使用雙精度。我不想顯示額外的零和小數,所以我將佔位符標記更改爲「%.f」。因爲我做了這個,如果我在計算器上做了一個有小數點的問題,他們就不會顯示出來。只在必要時刪除一個雙的尾隨零
我的問題基本上是否有任何方法只有在必要時才使用%.f。如果沒有辦法,你推薦做些什麼來實現它,所以我只在實際需要時使用小數。謝謝。
我正在製作一個計算器應用程序,我正在使用雙精度。我不想顯示額外的零和小數,所以我將佔位符標記更改爲「%.f」。因爲我做了這個,如果我在計算器上做了一個有小數點的問題,他們就不會顯示出來。只在必要時刪除一個雙的尾隨零
我的問題基本上是否有任何方法只有在必要時才使用%.f。如果沒有辦法,你推薦做些什麼來實現它,所以我只在實際需要時使用小數。謝謝。
您可能想要使用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
對於計算器,請考慮使用NSDecimalNumber
與NSNumberFormatter
的組合。使用浮點會遇到很多問題。考慮:(2/3.000000001)* 3.000000001,結果不一定完全是2.
(但即使NSDecimalNumber也無法正確計算(2/3)* 3 ...) –
@Martin True。實際上'NSDecimalNumber'就像'float'和'double'一樣。 (2/3)* 3是個不好的例子,我在答案中改變了這個例子。 – zaph
您可以使用NSDecimalNumber做十進制Calcs(計算),所以他們表現得更像鉛筆和紙張。並且/或者您可以掃描格式化的數字並且「修剪」掉尾隨零(以及小數點,如果合適的話)。 (當然,您可能需要先添加一個「小三角洲」,以避免獲得123.4599998。) –