2012-11-12 39 views
3

我正在尋找一種方式來表示一個的NSString滿足下列格式要求的雙精度值:)是否有可用於雙重字符串的格式化程序?

1.沒有尾隨零:X = 0.5000000 - > @ 「0.5」

2.)至少在小數點:x = 45 - > @ 「45.0」

3.)最多8個十進制字符(最後一個四捨五入):X = 0.000000005 - > @ 「0.00000001」

我試圖與@「% .8f「,@」%g「或@」%。8g「,但至少有一項要求失敗。

我想我可以用@做「%8F」,然後循環串與串到前面刪除「0」字的最後一個字符開頭的字符,

或者與開始「 %.8g「,如果字符串不包含小數點,則附加一個」.0「。

有沒有更智能的解決方案?

回答

4

你可以用一個數字格式化做到這一點,但你需要與你的雙先創建一個NSNumber:

NSNumber *halfNumber   = [NSNumber numberWithDouble:0.5000000];  
NSNumber *wholeNumber   = [NSNumber numberWithDouble:45];   
NSNumber *longNumber   = [NSNumber numberWithDouble:0.000000005]; 

NSNumberFormatter *formatter = [NSNumberFormatter new]; 
formatter.numberStyle   = NSNumberFormatterDecimalStyle; 
formatter.roundingMode   = NSNumberFormatterRoundHalfUp; 
formatter.minimumFractionDigits = 1; 
formatter.maximumFractionDigits = 8; 

NSString *halfString   = [formatter stringFromNumber:halfNumber]; 
NSString *wholeString   = [formatter stringFromNumber:wholeNumber]; 
NSString *longString   = [formatter stringFromNumber:longNumber]; 

NSLog(@"%@", halfString); 
NSLog(@"%@", wholeString); 
NSLog(@"%@", longString); 

// Output is: 
// 2012-11-12 04:22:41.181 Testing App[48069:fb03] 0.5 
// 2012-11-12 04:22:41.182 Testing App[48069:fb03] 45.0 
// 2012-11-12 04:22:41.183 Testing App[48069:fb03] 0.00000001 
+0

極好的例子:) –

+0

@AnoopVaidya:謝謝。 :) – lnafziger

+0

嗨,這看起來像要走的路!非常感謝您的快速和完整的答案! – user1702623