2011-07-03 60 views
5

我想從這樣一個雙重的字符串:有沒有辦法防止stringWithFormat四捨五入?

double aDouble; 
NSString* doubleString = [NSString stringWithFormat:@"%g", aDouble]; 

與大多數數字我得到想要的結果,但對於

10000.03 

我得到:

10000 

作爲我的字符串。有沒有辦法來防止這種行爲?我想結果的

10000.03 
+0

嘗試使用'%lf'代替。 – PengOne

回答

1

嘗試%.2f代替%克線

花車和雙是基數的兩種表示方法,我們喜歡在基地十看,就像不存在正確表示數字爲1/3的數字有限數字的數字有很多基數不能完全表示爲2的基數。例如0.1(1/10)不能完全表示爲基數2

3

%g在沒有精度說明符的情況下會很棘手。請注意,%f可與double值一起使用,並且可以使用%.2f(將2替換爲所需的任意位數)來限制小數點後的位數。

%g是一個格式說明根據以下算法%f%e之間的選擇:

  • 如果已經指定非零精度,讓P是精度
  • 如果零精度已指定,讓P爲1
  • 如果未指定精度,則讓P爲6
  • X是指數如果轉換是使用%e格式說明
    • 如果P>X> = -4,轉換與風格%f和精度P - ( X + 1)
    • 否則,轉換與風格%e和精度P - 1.
  • 除非使用#標誌,否則將從結果的小數部分中刪除任何尾隨零,並且如果沒有剩餘小數部分,則刪除小數點字符。

在你的情況,%g未指定的精度,因此P = 6.當與%e,這給1.000003e + 04轉換10000.03,指數爲4,因此X = 4。由於P>X> = -4,轉換與風格%f和精度P - (X + 1)= 6 - (4 + 1)= 1。但10000.03精確1(一小數點後面的數字)產生10000.0,其沒有實際的小數部分,因此%g格式10000.03爲10000.