NSNumberFormatter领先0和小数

时间:2012-01-15 21:55:51

标签: objective-c ios

有没有办法格式化带有前导0和小数的NSNumber?例如,我需要有能力写入4.5和000.目前我有它允许小数,但不是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'作为输出。

我看过Apple的“数据格式指南”但没有取得多大成功。

4 个答案:

答案 0 :(得分:7)

请注意,[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

如果您没有字符串,只需创建如下编号:

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];

答案 1 :(得分:1)

您可以尝试以下方式:

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

这样,在printf format之后,将打印您的号码,强制打印至少3位数,并用“0”填空任何空格。

答案 2 :(得分:1)

作为000的主题变体

,这怎么样?
 NSNumber *myNumber;
NSString *myString =@"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);

答案 3 :(得分:0)

由于这是经常被问及Apple的文档很糟糕,这是人们将要寻找的答案。以下链接有两个解决方案。一个使用NSString stringWithFormat:,另一个使用NSNumberFormatter

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