带有数字样式的 NSNumberFormatter NSNumberFormatterCurrencyStyle 逗号问题

Posted

技术标签:

【中文标题】带有数字样式的 NSNumberFormatter NSNumberFormatterCurrencyStyle 逗号问题【英文标题】:NSNumberFormatter with number style NSNumberFormatterCurrencyStyle trouble with commas 【发布时间】:2014-09-07 13:06:30 【问题描述】:

我正在尝试正确处理某些项目的投入费用。因此,在使用使用逗号分隔小数的区域设置的设备上工作时(小数点自动设置逗号','而不是点'。'供用户输入 ) 我使用核心数据将值存储在双变量中,以这种方式转换文本:

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setMaximumFractionDigits:2];
NSNumber * gasto = [f numberFromString:(((UITextField*) [cell viewWithTag:11]).text)];
destino.nuevaTrans.gasto = [gasto doubleValue];
//destino.nuevaTrans is the managed object, nothing weird there, just storing the decimal value

但是,当从存储的对象中取出值并在表格视图中显示它们时,由于逗号分隔的区域设置 (?),我会丢失小数点。这样做:

etiq = (UILabel*) [cell.contentView viewWithTag:12];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
etiq.text = [numberFormatter stringFromNumber:@(trans.gasto)];

//debugging console output:
//remmember, trans.gasto is only a double
NSLog(@"a: %f, b: %@", trans.gasto ,[numberFormatter stringFromNumber:@(trans.gasto)]);

模拟器上使用点 '.' 的输出语言环境设置工作正常,但在使用逗号 ',' 的设备上部署时,NSNumberFormatter 设置似乎无法将其正确转换为货币样式。

//output on the simulator:
2014-09-07 15:00:47.561 iSpend[3930:60b] a: 2.990000, b: $2.99

//output on the device:
2014-09-07 15:02:40.005 iSpend[1389:60b] a: 2.170000, b: ₡2

所以,我可以尝试破解这个东西......但我正在寻找更好的编程实践。每一个建议都值得赞赏!谢谢!

【问题讨论】:

你试过:- (void)setMinimumFractionDigits:(NSUInteger)number 输出吗? 你是对的,谢谢! 【参考方案1】:

每个区域设置确定是显示美分还是仅显示克朗。因此,如果您想强制它在逗号后显示数字,请添加以下行:

[numberFormatter setMinimumFractionDigits:2];

逗号后两位数。

但是你展示的例子有正确的输出。

【讨论】:

你是对的,谢谢!没有想到要指定最小的小数位数,因为我必须指定最大值。【参考方案2】:

你可以尝试清楚设置分隔符:[formatter setDecimalSeparator:@"."];

【讨论】:

以上是关于带有数字样式的 NSNumberFormatter NSNumberFormatterCurrencyStyle 逗号问题的主要内容,如果未能解决你的问题,请参考以下文章

NSNumberFormatter numberFromString 为货币样式格式化程序返回 0

使用 NSNumberFormatter 将数字转换为格式

使用 NSNumberFormatter 生成小数点后尾随零的数字

具有有效数字的 NSNumberFormatter 错误地格式化 0.0

NSNumberFormatter 用于 2 个小数位

NSNumberFormatter 货币符号