2

我正在使用键盘类型:UIKeyboardTypeDecimalPad用于两个UITextField对象。尝试执行添加时,我会根据当前的语言环境得到不同的结果:

案例1:美国格式:小数点.按预期出现。如果我添加 12.3(文本字段 1)+ 12.3(文本字段 2),答案将是 24.6。这就是我想要的。但:

案例 2:埃及 格式:小数点显示为,. 如果我重复相同的计算,答案将是 24。小数部分被忽略。有解决办法吗?

注意:我使用的[textField.text floatValue]方法。

4

2 回答 2

5

因为floatValue进行非本地化扫描,所以它需要“美国格式”。

您可以使用 NSScanner 对象对字符串中的数值进行本地化扫描。

请参阅:字符串编程指南:扫描仪

注意最后一段:

本土化

扫描器的某些扫描行为基于区域设置,该区域指定了值表示的语言和约定。NSScanner 仅使用区域设置的小数分隔符定义(由名为 NSDecimalSeparator 的键给出)。您可以使用localizedScannerWithString: 创建一个带有用户区域设置的扫描器,或者使用setLocale: 显式设置区域设置。如果您使用未指定区域设置的方法,则扫描程序会采用默认区域设置值。

另请参阅:如何在 Objective-C 中进行字符串转换?

例子:

NSScanner *scanner = [NSScanner localizedScannerWithString:textField.text];
double mynumber;
if([scanner scanDouble: &mynumber]){
  // do something
};
于 2012-07-14T22:31:25.170 回答
0

您可以使用:

double number = [[self.myTextField.text stringByReplacingOccurencesOfString:@”,” withString:@”.”] doublevalue];

这适用于所有语言。

于 2013-02-25T09:45:08.807 回答