用逗号分隔的NSNumberFormatter

我试图将“12000.54”的NSString转换为“12.000,54”。 我写了一个NSNumberFormatter实例。

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; [formatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; [formatter setGroupingSeparator:@"."]; [formatter setDecimalSeparator:@","]; 

但是当我NSLog这个:

 NSLog(@"%@",[formatter stringFromNumber:[formatter numberFromString:value]]); 

它打印空值。 如果我改变我的逗号点是正确的。 我只是想能够把我想要的分隔符字段(逗号,点,斜杠等),我有不同的输出:12 / 000,54 12.000.54 12,000,54例如。

你知道我可以如何处理这个?

我build议不要硬编码分隔符,以确保基于iPhone语言环境设置的正确的分隔符行为。 最简单的方法是:

使用objective-c

 NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc]init]; numberFormatter.locale = [NSLocale currentLocale];// this ensures the right separator behavior numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; numberFormatter.usesGroupingSeparator = YES; // example for writing the number object into a label cell.finalValueLabel.text = [NSString StringWithFormat:@"%@", [numberFormatter stringForObjectValue:numberFromString]]; // your var name is not well chosen 

使用SWIFT 3

  let formatter = NumberFormatter() formatter.locale = NSLocale.current // this ensures the right separator behavior formatter.numberStyle = NumberFormatter.Style.decimal formatter.usesGroupingSeparator = true // example for writing the number object into a label // your variable "numberFromString" needs to be a NSNumber object finalValueLabel.text = formatter.string(from: numberFromString)! // your var name is not well chosen 

我不会使用var-name“numberFromString”,因为它是一个NSNumberFormatter方法。 祝你好运!

所以问题是有效的:我自己回答:)

我有一个从sqlite(例如12000或12000.54)直接转换成NSString读取十进制值。 我不得不在我的代码中使用不同的分隔符。

 NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; [formatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; [formatter setGroupingSeparator:@""]; [formatter setDecimalSeparator:@"."]; // Decimal values read from any db are always written with no grouping separator and a comma for decimal. NSNumber *numberFromString = [formatter numberFromString:@"12000.54"]]; [formatter setGroupingSeparator:@" "]; // Whatever you want here [formatter setDecimalSeparator:@","]; // Whatever you want here NSString *finalValue = [formatter stringFromNumber:numberFromString]; NSLog(@"%@",finalValue); // Print 12 000,54 

问题解决了。

我最近find的最简单的解决scheme是:

 NSString *localizedString = [NSString localizedStringWithFormat:@"%@", @1234567]; 

也适用于整数:

 NSString *localizedString = [NSString localizedStringWithFormat:@"%d", 1234567]; 

在Xcode 6操场上validation。 但是文档说这个function一直存在。

 NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; numberFormatter.usesGroupingSeparator = YES; [numberFormatter setMaximumFractionDigits:2]; [numberFormatter setMinimumFractionDigits:2]; NSString *formattedNumberString = [numberFormatter stringFromNumber:@122344.00];` 

这将解决你的四舍五入问题,如果你正在处理小数点。

对于货币使用…

 let numberFormatter = NumberFormatter() // Produces symbol (ie "$ " for en_US_POSIX) and decimal formatting numberFormatter.numberStyle = .currency // Produces commas; ie "1,234" numberFormatter.usesGroupingSeparator = true numberFormatter.groupingSize = 3 

用法示例:

 let value: Double = 12345.6789 numberFormatter.string(from: value as NSNumber) 

收益率…

 "$ 12,345.68" 

如人们所期望的那样