设备语言更改时的格式化程序问题
Formatter issue when language changed in device
我正在尝试从 amount
字符串中获取 float number
,但不包含 currency symbol
,例如“100.00”。它以英语正常工作。当设备中的语言更改为德语时,其行为也会发生变化。如何在不受设备语言变化影响的情况下实现浮点值。
func getFloatNumberFromString(_ str: String) -> Float {
guard let number = NumberFormatter().number(from: str) else {
return 0.0
}
return number.floatValue
}
下面的另一段代码来处理它:
func removeFormatAmount() -> Double {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter.number(from: self) as! Double? ?? 0
}
当我使用第二种方法时,输出为 0。
请让我知道我缺少什么或建议我处理它。
提前致谢
你试过直接投射吗?像这样。
let floatString = "12.34"
let number = Double(floatString) ?? 0.0
在许多欧洲国家,小数点分隔符是逗号而不是点。
您可以将格式化程序的 Locale
设置为固定值。
func float(from str: String) -> Float {
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
guard let number = formatter.number(from: str) else {
return 0.0
}
return number.floatValue
}
PS:我更改了签名以适应 Swift 3+ 风格
我正在尝试从 amount
字符串中获取 float number
,但不包含 currency symbol
,例如“100.00”。它以英语正常工作。当设备中的语言更改为德语时,其行为也会发生变化。如何在不受设备语言变化影响的情况下实现浮点值。
func getFloatNumberFromString(_ str: String) -> Float {
guard let number = NumberFormatter().number(from: str) else {
return 0.0
}
return number.floatValue
}
下面的另一段代码来处理它:
func removeFormatAmount() -> Double {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter.number(from: self) as! Double? ?? 0
}
当我使用第二种方法时,输出为 0。
请让我知道我缺少什么或建议我处理它。 提前致谢
你试过直接投射吗?像这样。
let floatString = "12.34"
let number = Double(floatString) ?? 0.0
在许多欧洲国家,小数点分隔符是逗号而不是点。
您可以将格式化程序的 Locale
设置为固定值。
func float(from str: String) -> Float {
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
guard let number = formatter.number(from: str) else {
return 0.0
}
return number.floatValue
}
PS:我更改了签名以适应 Swift 3+ 风格