如果我使用十进制数字输入数字,则十进制根据国家和地区格式而变化
可以作为一个点“。”或作为逗号“,”
我无法控制应用程序使用的设备
如果区域格式使用逗号,则计算出错。投入5,6与仅投入5次和56次相同
即使我以编程方式允许两者兼而有之。并且,作为TextField中的输入
如何在不使用数字标点垫的情况下解决此问题,并且可能还必须提供说明以避免使用逗号输入“,”
它只是我需要的数字和小数的输入,小数点是如此好。
答案 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对象阅读,你可以根据需要操纵输入值并对其进行转换。
同时显示结果替换“。”使用“,”以便用户根据区域格式感到舒适。