在Swift 5中,如何将Float转换为本地化的String,以便在textField中显示它



我需要将Float转换为本地化的String。我写这个函数,它是Float:的扩展

func afficherUnFloat() -> String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.locale = Locale.current
//numberFormatter.maximumFractionDigits = 2
//numberFormatter.maximumIntegerDigits = 6

if let result = numberFormatter.number(from: self) {
return numberFormatter.string(for: result) ?? "0"
}
return "0"
}

但没有奏效:这是的示例

let xxx : Float =  111.222
myTextField.text = String(xxx).afficherUnFloat()

我安装了一个pod KSNumericTextField,它限制了文本字段中的数字。只有当它是本地格式化的时,他才会显示它。

当我运行该应用程序时,它不会在法国地区显示111222,也不会在阿拉伯地区显示111222。没有发现任何东西

请注意,不需要将Float强制转换为NSNumber。您可以使用Formatter的方法字符串(用于:Any(,而不是NumberFormatter的方式字符串(来自:NSNumber(。顺便说一句,每次调用此属性时,它都会创建一个新的数字格式化程序。我会让你的格式化程序静态:

extension Formatter {
static let decimal: NumberFormatter = {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.locale = .current
numberFormatter.maximumFractionDigits = 2 // your choice
numberFormatter.maximumIntegerDigits = 6 // your choice
return numberFormatter
}()
}
extension FloatingPoint {
var afficherUnFloat: String { Formatter.decimal.string(for: self) ?? "" }
}
let float: Float = 111.222
let string = float.afficherUnFloat // "111.22"

这里终于有了一个解决方案:

extension Float {

func afficherUnFloat() -> String {
let text : NSNumber = self as NSNumber
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.locale = .current
numberFormatter.groupingSeparator = ""
numberFormatter.maximumFractionDigits = 2 // your choice
numberFormatter.maximumIntegerDigits = 6 // your choice
let result = numberFormatter.string(from: text) ?? ""
return result
}

}

有了它,您可以将每个Float格式化为本地化的String,与用户选择的键盘兼容,而不考虑用户的位置或语言。没有必要强制特殊键盘具有特定的十进制分隔符。

你可以这样使用它:

let myFloat: Float = 111.222
let myString :String = myFloat.afficherUnFloat()

myString将显示为位置需要

最新更新