2012-01-15 47 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

相关问题