带编号样式NSNumberFormatterCurrencyStyle的NSNumberFormatter有逗号

时间:2014-09-07 13:06:31

标签: ios objective-c localization nsnumberformatter currency-formatting

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

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

所以,我可以试着破解这个东西......但是我在这里寻找更好的编程实践。每个建议都表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:1)

每个Locale确定它是显示美分还是仅显示Krona。因此,如果要强制它在逗号后面显示数字,请添加以下行:

[numberFormatter setMinimumFractionDigits:2];

以逗号后的两位数字。

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

答案 1 :(得分:1)

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