2012-01-15 60 views
6

是否有任何方式來格式化前導0和小數的NSNumber?例如,我需要能夠編寫4.5以及000.目前,我有它在哪裏會允許小數,但不是領先0。NSNumberFormatter前導0和小數

NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
f.numberStyle = NSNumberFormatterNoStyle; 

NSString *myString = [f numberFromString:@"4.5"]; 
NSLog(@"myString: %@",myString); 

NSString *myOtherString = [f numberFromString:@"000"]; 
NSLog(@"myOtherString:%@",myOtherString); 

上面的輸出是:'myString:4.5'和'myOtherString:0'。我需要能夠做'4.5'和'000'作爲輸出。

我看過蘋果的「數據格式指南」,但沒有取得太大的成功。

+0

你知道,我想我們正在回答這個錯誤。我們正在接受一個字符串並將其轉換爲一個數字,然後返回到一個字符串?我認爲想要的是一個數字。你能否告訴我們你是否真的想要一個字符串或一個數字。它是從什麼開始?你的代碼和問題有點偏斜。乾杯 – markhunte 2012-01-15 23:07:17

+0

@markhunte我注意到了同樣的事情,所以我提供了用於創建'NSNumber'的可選實現。還有'NSNumber'這個問題甚至是必要的,所以我提供了使用'NSNumber'的可選實現。 – zaph 2012-01-15 23:24:18

+0

@markhunte輸入來自UITextField。它的大小描述爲:0000,000,00,0,1,2,3 ...以及4.5,5.25等。 CoreData類型是float,屬性是NSNumber(因爲我想能夠在分組表中對它進行排序,數字爲:0,1,2,11,23而不是0,1,11,2,23)。它以文本形式顯示在表格單元格中。轉換是從字符串到數字到字符串。啞我知道。但是,NSNumericSearch似乎不適用於iOS,至少對我而言。過去我一直無視000,但有些客戶想要這種能力。 – Kurt 2012-01-16 05:46:08

回答

1

你可以嘗試這樣的:

NSString *myString = [NSString stringWithFormat:@"%03f", [myNSNumber floatValue]]; 

此,繼printf format,將打印您的號碼迫使至少3位數字印刷,並與「0'的任何空白區域的填充。

+1

格式@「%03f」將打印:4.500000和0.000000。對我來說 – zaph 2012-01-15 22:53:32

+0

strDonation = [NSString stringWithFormat:@「0%d」,[strDonation integerValue]]; w0rked – iMeMyself 2013-06-05 11:14:31

6

注意[f numberFromString:@"4.5"]返回一個NSNumber*不是一個NSString*

你想是這樣的:

NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
f.numberStyle = NSNumberFormatterNoStyle; 

NSNumber *myNumber; 
NSString *myString; 

myNumber = [f numberFromString:@"4.5"]; 
[f setNumberStyle:kCFNumberFormatterDecimalStyle]; 
myString = [f stringFromNumber:myNumber]; 
NSLog(@"myString: %@",myString); 

myNumber = [f numberFromString:@"000"]; // Note that the extra zeros are useless 
[f setFormatWidth:3]; 
[f setPaddingCharacter:@"0"]; 
myString = [f stringFromNumber:myNumber]; 
NSLog(@"myString: %@",myString); 

的NSLog輸出:

的myString:4.5
的myString:000

如果你沒有字符串,只需創建numbe即可[R這樣的:

myNumber = [NSNumber numberWithFloat:4.5]; 
myNumber = [NSNumber numberWithInt:0]; 

或者只是使用標準格式:

myString = [NSString stringWithFormat:@"%.1f", [myNumber floatValue]]; 
myString = [NSString stringWithFormat:@"%03d", [myNumber intValue]]; 

或者,如果你不需要一個NSNumber表示只使用標準格式:

myString = [NSString stringWithFormat:@"%.1f", 4.5]; 
myString = [NSString stringWithFormat:@"%03d", 0]; 
+0

我知道000是無用的。它不是一個值,它是一個尺寸的描述符。輸入字段可能有:0000,000,00或整數或浮點數。我想我可能不得不以不同的方式做到這一點。我可能不得不使用字符串並設置自定義排序,儘管我用NSNumericSearch嘗試了這種方式,但沒有喜悅。 – Kurt 2012-01-16 05:52:21

1

這個怎麼樣的000的主題變化

NSNumber *myNumber; 
NSString *myString [email protected]"000" ; 
NSString * myStringResult; 
NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
f.numberStyle = NSNumberFormatterNoStyle; 
[f setHasThousandSeparators:FALSE]; //-- remove seperator 
[f setMinimumIntegerDigits:[myString length ]]; //-- set minimum number of digits to display using the string length. 



myNumber = [f numberFromString:myString]; 



myStringResult = [f stringFromNumber:myNumber]; 
NSLog(@"myStringResult: %@",myStringResult); 
+0

所以它確實..更新了答案。謝謝 – markhunte 2012-01-15 23:25:27

+0

乾杯,我只是爲000的情況。但在發佈之前的最後一分鐘,我們錯誤地嘗試了45而不是4.5。這就是爲什麼我補充說它爲兩個數字工作。但是,正如你所說,這不是我的真正意圖。 – markhunte 2012-01-15 23:34:05

0

由於這是經常被問及蘋果的文檔吸引人,這是人們將尋找的答案。以下鏈接有兩個解決方案。一個使用NSString stringWithFormat:,另一個使用NSNumberFormatter

https://stackoverflow.com/a/11131497/1058199