【发布时间】:2019-10-24 15:02:00
【问题描述】:
在处理货币格式时,我在尝试格式化智利比索时发现了一个问题。
以下代码:
let priceFormatter = NumberFormatter()
priceFormatter.locale = Locale(identifier: "es_CL")
priceFormatter.numberStyle = .currency
priceFormatter.currencyCode = "CLP"
priceFormatter.string(from: 9990) // A
priceFormatter.string(from: 99900) // B
执行此操作,A 获得 9990 美元,B 获得 99.990 美元。
我想要为 A
看起来格式化程序没有在第一种情况下添加千位分组分隔符,我不知道为什么。我尝试将groupingSize 设置为 3,但没有成功。
(这只发生在 4 位数字上)
【问题讨论】:
-
你说“我要实现”。但也许这实际上是智利的惯例:仅对大于 10000 的值添加千位分隔符。也许数字格式化程序比我们更清楚。
-
以下:thefinancials.com/Default.aspx?SubSectionID=curformat 我看到 CLP 被标记为 #.###
-
我支持你,但这并不能告诉我们 NumberFormatter 的想法。 :) 我的意思是,从这里无法判断这是一个错误还是意见分歧。如果您将语言环境更改为
en_US,您在这两种情况下都会得到分隔符。我倾向于相信 NumberFormatter 比我更了解当地的惯例。如果你改变你的期望,你可能会更快乐。 :) -
我在一个网页上用你可以更改的 JavaScript 示例对此进行了测试,并得到了与 CLP 完全相同的行为,所以我认为我们可以假设 NumberFormatter 是正确的(或者至少与它的 javascript 对应项一样好) :))。
-
根据spanishnumbers.guide/numbers-in-spanish.html#decimals,“不得分隔只有四位数字的数字。”
标签: swift nsnumberformatter currency-formatting