gpt4 book ai didi

iOS swift NumberFormatter 小数样式本地化

转载 作者:行者123 更新时间:2023-11-28 08:10:47 33 4
gpt4 key购买 nike

我正在使用 NumberFormatter.Style.decimal 我需要 20000.23 应该是 20,000.23 因为我创建了一个扩展

var NumerWithDecimalPoint : String{    
if self != ""{

let numberFormatter = NumberFormatter()
if IS_PERSIAN{
numberFormatter.locale = Locale(identifier: "fa_IR")
}else{
numberFormatter.locale = Locale(identifier: "EN")
}
numberFormatter.numberStyle = NumberFormatter.Style.decimal
numberFormatter.maximumFractionDigits = 2
numberFormatter.roundingMode = .floor

let number = numberFormatter.number(from: self)
let str = numberFormatter.string(from: number!)

return str!
}else{
return ""
}

}

如果在 en 中工作正常但在 fa_IR 中崩溃 let number = numberFormatter.number(from: self)

最佳答案

您的目标似乎是将以某种未知格式表示数字的字符串转换为以某种特定语言很好地格式化的表示相同数字的字符串。

崩溃的原因是,如果 IS_PERSIAN 为真,则由于波斯语言环境,尝试解析英语数字失败。然后你尝试强制打开 nil 数字。

您真正需要做的是尝试使用各种语言环境解析“self”,直到获得有效的 NSNumber 结果。然后使用所需的语言环境将该数字转换回字符串。

对您的代码进行以下更新可实现此目的:

extension String {
var numerWithDecimalPoint : String{
if self != ""{
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 2
numberFormatter.roundingMode = .floor

var number: NSNumber?
if let num = numberFormatter.number(from: self) {
number = num
} else {
numberFormatter.locale = Locale(identifier: "fa_IR")
if let num = numberFormatter.number(from: self) {
number = num
} else {
numberFormatter.locale = Locale(identifier: "en")
if let num = numberFormatter.number(from: self) {
number = num
}
}
}

let str: String
if let number = number {
if IS_PERSIAN{
numberFormatter.locale = Locale(identifier: "fa_IR")
}else{
numberFormatter.locale = Locale(identifier: "en")
}
if let res = numberFormatter.string(from: number) {
str = res
} else {
str = "Can't convert \(number) to a string"
}
} else {
str = "Can't convert \(self) to a number"
}

return str
}else{
return ""
}
}
}

此代码首先尝试使用用户的语言环境将原始字符串转换为数字。如果失败,它会尝试波斯语。如果失败,它会尝试英语。

关于iOS swift NumberFormatter 小数样式本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43840222/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com