NSNumberFormatter.number 货币格式在设备中不起作用但在模拟器中起作用
NSNumberFormatter.number for currency format not working in Device but works in simulator
我一直在尝试根据传递我的自定义语言标识符来实现货币格式。
下面是我的代码
func currencyFormatter(language:String, amount:String) -> String {
let nsFormatter = NumberFormatter()
nsFormatter.numberStyle = .currency
nsFormatter.currencySymbol = ""
var formattedString: String?
var amountInNumber:NSNumber!
if let number = nsFormatter.number(from: amount)
{
amountInNumber = number.doubleValue as NSNumber
}
nsFormatter.locale = Locale(identifier: language)
formattedString = ((amountInNumber?.intValue) != nil) ? nsFormatter.string(from: amountInNumber) : amount
guard let finalString = formattedString else {
return ""
}
return finalString
}
我正在尝试将语言作为 "fr-FR" 传递,将金额作为“1234.45”传递,然后期望输出为“1 234,45”。
这在模拟器中工作正常但在设备中不工作(返回相同的值 1234.45)
我是不是错过了什么。请帮忙!
提前致谢
小数点分隔符依赖于语言环境,因此解析“1234.45”
如果语言环境的分隔符不是句点,则会失败。
如果输入字符串使用固定格式,以句点作为小数点分隔符
然后您可以将格式化程序的语言环境设置为 "en_US_POSIX" 以进行转换
从字符串到数字。然后将其设置为转换所需的语言环境
从数字到字符串。
示例:
func currencyFormatter(language: String, amount: String) -> String {
let nsFormatter = NumberFormatter()
nsFormatter.locale = Locale(identifier: "en_US_POSIX")
nsFormatter.numberStyle = .decimal
guard let number = nsFormatter.number(from: amount) else {
return amount
}
nsFormatter.locale = Locale(identifier: language)
nsFormatter.numberStyle = .currency
return nsFormatter.string(from: number) ?? amount
}
print(currencyFormatter(language: "fr-FR", amount: "1234.45"))
// 1 234,45 €
我一直在尝试根据传递我的自定义语言标识符来实现货币格式。
下面是我的代码
func currencyFormatter(language:String, amount:String) -> String {
let nsFormatter = NumberFormatter()
nsFormatter.numberStyle = .currency
nsFormatter.currencySymbol = ""
var formattedString: String?
var amountInNumber:NSNumber!
if let number = nsFormatter.number(from: amount)
{
amountInNumber = number.doubleValue as NSNumber
}
nsFormatter.locale = Locale(identifier: language)
formattedString = ((amountInNumber?.intValue) != nil) ? nsFormatter.string(from: amountInNumber) : amount
guard let finalString = formattedString else {
return ""
}
return finalString
}
我正在尝试将语言作为 "fr-FR" 传递,将金额作为“1234.45”传递,然后期望输出为“1 234,45”。
这在模拟器中工作正常但在设备中不工作(返回相同的值 1234.45)
我是不是错过了什么。请帮忙!
提前致谢
小数点分隔符依赖于语言环境,因此解析“1234.45” 如果语言环境的分隔符不是句点,则会失败。
如果输入字符串使用固定格式,以句点作为小数点分隔符 然后您可以将格式化程序的语言环境设置为 "en_US_POSIX" 以进行转换 从字符串到数字。然后将其设置为转换所需的语言环境 从数字到字符串。
示例:
func currencyFormatter(language: String, amount: String) -> String {
let nsFormatter = NumberFormatter()
nsFormatter.locale = Locale(identifier: "en_US_POSIX")
nsFormatter.numberStyle = .decimal
guard let number = nsFormatter.number(from: amount) else {
return amount
}
nsFormatter.locale = Locale(identifier: language)
nsFormatter.numberStyle = .currency
return nsFormatter.string(from: number) ?? amount
}
print(currencyFormatter(language: "fr-FR", amount: "1234.45"))
// 1 234,45 €