2

如果我使用小数点输入数字,小数点会根据国家和地区格式而变化。
可作为一个点“。” 或逗号“,”
而且我无法控制在哪个设备上使用该应用程序。
如果区域格式使用逗号,则计算会出错。投入 5,6 与投入 5 次和投入 56 次相同。
即使我以编程方式允许两者。和 ,作为文本字段中的输入。
我如何在不使用标点符号的数字的情况下解决这个问题,并且可能还必须给出指示以避免输入逗号“,”
它只输入我需要的数字和小数,小数点要好得多。

4

4 回答 4

9

您应该为此使用NSNumberFormatter,因为它可以设置为处理不同的语言环境。

创建格式化程序:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setLocale:[NSLocale currentLocale]];

用它:

NSNumber *number = [numberFormatter numberFromString: string]; //string is the textfield.text

如果设备的区域设置为区域设置,其中 a 中的小数点分隔符,,数字键盘将使用 is 和格式化程序。在那些上,分组分隔符将是.

对于其他语言环境,反之亦然。

NSNumberFormatter 非常复杂,您也应该阅读Data Formatter Guide中的部分。它还知道很多货币处理(显示,而不是转换),如果你的应用确实处理了这些。

于 2013-03-04T11:02:45.097 回答
0

您还可以使用 NSNumberFormatter 的类方法

NSString* formattedString = [NSNumberFormatter 
                                 localizedStringFromNumber:number
                                 numberStyle:NSNumberFormatterCurrencyStyle];
于 2013-10-10T06:49:05.530 回答
0

识别是当地国家使用逗号作为小数点

var isUsesCommaForDecimal : Bool {
    let nf = NumberFormatter()
    nf.locale = Locale.current
    let numberLocalized = nf.number(from: "23,34")
    if numberLocalized != nil {
        return true
    } else {
        return false
    }
}
于 2018-03-20T07:07:20.700 回答
-2

一种方法是检查 textField 是否包含“,”。

如果包含,则将其替换为“。” 并进行所有算术运算。

无论如何,您将读取所有 textFields 和 textViews 作为 NSString 对象,您可以操作输入值并根据需要对其进行转换。

同样在显示结果时替换“。” 用“,”让用户根据那里的区域格式感到舒服。

于 2013-03-04T10:35:30.290 回答