UIKeyboardTypeDecimalPad中的小数点不能用于数学计算

时间:2012-07-14 22:28:18

标签: iphone objective-c ios keyboard uitextfield

我使用键盘类型:UIKeyboardTypeDecimalPad用于两个UITextField个对象。 尝试执行添加时,根据当前区域设置得到不同的结果:

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

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

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

2 个答案:

答案 0 :(得分:5)

由于floatValue执行非本地化扫描,因此需要“美国格式”。

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

请参阅:String Programming Guide: Scanners

注意最后一段:

  

<强>本地化

     

扫描程序将其部分扫描行为基于区域设置   指定值表示的语言和约定。   NSScanner仅使用区域设置的小数分隔符定义   (由名为NSDecimalSeparator的密钥给出)。您可以创建扫描仪   使用localizedScannerWithString:或用户的语言环境设置   使用setLocale明确的语言环境:如果你使用的方法   如果未指定语言环境,则扫描程序将采用默认语言环境   值。

另请参阅:How to do string conversions in Objective-C?

示例:

NSScanner *scanner = [NSScanner localizedScannerWithString:textField.text];
double mynumber;
if([scanner scanDouble: &mynumber]){
  // do something
};

答案 1 :(得分:0)

您可以使用:

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

这适用于所有语言。