【问题标题】:Decimal point in UIKeyboardTypeDecimalPad can't be used in mathematical calculationUIKeyboardTypeDecimalPad 中的小数点不能用于数学计算
【发布时间】:2012-07-14 22:28:17
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: iphone objective-c ios keyboard uitextfield


    【解决方案1】:

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

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

    见:String Programming Guide: Scanners

    注意最后一段:

    本地化

    扫描器的某些扫描行为基于区域设置,该区域设置为 指定值表示的语言和约定。 NSScanner 仅使用区域设置的小数分隔符定义 (由名为 NSDecimalSeparator 的键给出)。您可以创建扫描仪 使用本地化ScannerWithString:,或设置用户的语言环境 显式使用 setLocale: 的语言环境。如果你使用一种方法 未指定区域设置,扫描仪假定默认区域设置 价值观。

    另见:How to do string conversions in Objective-C?

    例子:

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

    【讨论】:

      【解决方案2】:

      你可以使用:

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

      所有语言都可以。

      【讨论】:

        猜你喜欢
        • 2017-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多