【问题标题】:NSNumberFormatter different on device and simulatorNSNumberFormatter 在设备和模拟器上不同
【发布时间】:2013-02-17 12:53:34
【问题描述】:

我有一个 UITextField,使用此代码,在底部的标签上打印值并对其进行格式化。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setUsesGroupingSeparator:NO];
[formatter setMaximumFractionDigits:2];
[formatter setMinimumFractionDigits:2];
NSNumber *calcolo = [NSNumber numberWithDouble:[value1 doubleValue]-[self.textfield.text doubleValue]];
formattedString = [formatter stringFromNumber:calcolo];
self.label.text = formattedString;

在模拟器(美国)上,该值显示正确。在设备 (IT) 上,键盘上有逗号,但逗号后面的值始终为零。

编辑:这行得通

NSNumber *temporaryValue1 = [formatter numberFromString:[NSString stringWithFormat:@"%@",value1]];
NSNumber *temporaryTextField = [formatter numberFromString:self.textField.text];
NSNumber *calcolo = [NSNumber numberWithFloat:([temporaryValue1 floatValue] - [temporaryTextField floatValue])];
formattedString = [formatter stringFromNumber:calcolo];

【问题讨论】:

  • 而不是 setDecimalStyle 和设置数字的数量等。尝试 [numberFormatter setPositiveFormat:@"###0.##"];

标签: ios nsnumberformatter


【解决方案1】:

我认为问题不在于您的输出。问题是您从-[NSString doubleValue] 获得的输入。该方法不尊重用户的语言环境。

您应该能够使用您制作的格式化程序将self.textField.text 转换为正确遵守区域设置的数字。或者您可以考虑使用NSDecimalNumbers,特别是如果这是货币(看起来像?)。然后NSDecimalNumber 有一个方法+decimalNumberWithString 也可以为您做正确的事情。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 2015-09-28
  • 2018-08-27
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
相关资源
最近更新 更多