如何實現從雙到字符串如下轉換:限制雙到小數點後兩位
1.4324 => "1.43"
9.4000 => "9.4"
43.000 => "43"
即我要四捨五入到的小數位數,但不希望任何尾隨零,即我不想
9.4 => "9.40" (wrong)
43.000 => "43.00" (wrong)
所以這個代碼,我現在不工作,因爲它顯示多餘的零:
[NSString stringWithFormat: @"%.2f", total]
如何實現從雙到字符串如下轉換:限制雙到小數點後兩位
1.4324 => "1.43"
9.4000 => "9.4"
43.000 => "43"
即我要四捨五入到的小數位數,但不希望任何尾隨零,即我不想
9.4 => "9.40" (wrong)
43.000 => "43.00" (wrong)
所以這個代碼,我現在不工作,因爲它顯示多餘的零:
[NSString stringWithFormat: @"%.2f", total]
我不熟悉的客觀C,但這是不可能的標準printf風格的格式。
使用%g將排序的工作,但對於大或小的數字,它將使用科學記數法(如9.6E + 6,4.2E-7),而不是十進制格式。
的equivalent question was asked for C/C++ here,並且在此情況下,答案是使用%F,然後從字符串中去除任何尾隨0。不完全優雅。
嘿,那是我的答案,你打電話不雅:-)實際上,它在Objective-C中更加優雅,因爲字符串實際上是字符串,而不是C char數組和其所有的弱點。 – paxdiablo 2009-07-11 11:27:42
最簡單的方法是可能推出自己的。我必須在C中執行此操作,因爲無法通過printf
格式獲取所需的行爲。
它不會出現在Objective-C的容易得多無論是。我想這給一個嘗試:
NSString *ftotal = [NSString stringWithFormat: @"%.2f", total];
while ([ftotal hasSuffix:@"0"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
if ([ftotal hasSuffix:@"."]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
或本(可能更快)的變體:
NSString *ftotal = [NSString stringWithFormat: @"%.2f", total];
if ([ftotal hasSuffix:@".00"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-3];
} else {
if ([ftotal hasSuffix:@"0"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
}
的stringWithFormat
保證總是會有一個".nn"
末(其中n
是一個數字字符) 。 while
和if
只消除尾隨零和尾隨小數(如果它是整數)。
很明顯,你可能希望把它放在一個函數或類,所以你可以在它從任何地方得到,而不必複製代碼所有的地方。
我敢肯定,[[NSNumber的numberWithFloat:F] stringValue的]不正是你想要的。
你犯了一個簡單的錯誤。這將工作:
[NSString stringWithFormat: @"%.2lf", total]
這不是http://stackoverflow.com/questions/4985791/round-double-value-to-2-decimal-places的副本,所以我覺得應該是無人盯防的重複。這個問題是關於如何限制到兩位小數的*最大*,而另一個問題是如何限制*總是*兩位小數。後者很容易,在原始問題中已經提到。 – 2015-05-27 10:58:14
是的,它不是重複的。有人對他們的mod權力感到興奮。 – Jacob 2015-05-27 22:07:58