我正在尝试正确处理某些项目的投入费用。因此,在使用使用逗号分隔小数的区域设置的设备上工作时(小数点自动设置逗号','而不是点'。'供用户输入)我使用核心数据将值存储在双变量中转换以这种方式发短信:
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
所以,我可以尝试破解这个东西......但我在这里寻找更好的编程实践。每一个建议都值得赞赏!谢谢!