计算中的小数点为。要么 ,

时间:2013-03-04 10:30:35

标签: ios objective-c cocoa-touch numbers decimal

如果我使用十进制数字输入数字,则十进制根据国家和地区格式而变化 可以作为一个点“。”或作为逗号“,”
我无法控制应用程序使用的设备 如果区域格式使用逗号,则计算出错。投入5,6与仅投入5次和56次相同 即使我以编程方式允许两者兼而有之。并且,作为TextField中的输入 如何在不使用数字标点垫的情况下解决此问题,并且可能还必须提供说明以避免使用逗号输入“,” 它只是我需要的数字和小数的输入,小数点是如此好。

4 个答案:

答案 0 :(得分:9)

为此,请使用NSNumberFormatter,因为可以将其设置为处理不同的区域设置。

创建格式化程序:

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

使用它:

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

如果设备的语言环境设置为语言环境,,中的小数分隔符,数字小键盘将使用的是格式化程序。在那些分组分隔符将是.

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

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

答案 1 :(得分:0)

您也可以使用NSNumberFormatter的类方法

NSString* formattedString = [NSNumberFormatter 
                                 localizedStringFromNumber:number
                                 numberStyle:NSNumberFormatterCurrencyStyle];

答案 2 :(得分: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
    }
}

答案 3 :(得分:-2)

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

如果包含,请将其替换为“。”并做所有算术运算。

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

同时显示结果替换“。”使用“,”以便用户根据区域格式感到舒适。