gpt4 book ai didi

swift - 货币格式的 NSNumberFormatter.number 在设备中不起作用但在模拟器中起作用

转载 作者:可可西里 更新时间:2023-11-01 01:08:41 25 4
gpt4 key购买 nike

我一直在尝试根据传递我的自定义语言标识符来实现货币格式。

下面是我的代码

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 €

关于swift - 货币格式的 NSNumberFormatter.number 在设备中不起作用但在模拟器中起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51084518/

25 4 0
文章推荐: php - 从一个php文件中获取json数据
文章推荐: 文件中的 Swift Shell 命令回显
文章推荐: java - 为什么 List 不是 List 的子类型?