Swift NumberFormatter 只为千
Swift NumberFormatter just for thousand
我想在 1 之后用 1000 分隔,但我得到的分隔符是数字 >=10000
我是怎么做到的:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.string(for: myNumber)
我得到了什么:
(lldb) po formatter.string(for: 1000)
▿ Optional<String>
- some : "1000"
(lldb) po formatter.string(for: 10000)
▿ Optional<String>
- some : "10 000"
为什么1000没有分隔符?
听起来 NumberFormatter 中的 pl_PL 语言环境可能存在错误。我建议向 Apple 报告此问题。您可以在 macOS 上使用反馈助手应用程序。
您可以在技术上实施解决方法,即对语言环境进行硬编码或尝试进行您自己的格式设置,但强制所有用户使用特定格式通常不是好的做法。自行实施格式化可能会成为边缘案例的陷阱,并且容易出错。
你问:
why there is no separator in 1000?
这种在只有四位数字时省略分组分隔符的模式对于使用 space 作为分隔符的语言来说并不少见。
正如Exceptions to digit grouping所说:
The International Bureau of Weights and Measures states that “when there are only four digits before or after the decimal marker, it is customary not to use a space to isolate a single digit”.
您将在多个使用 space 作为分组分隔符的语言环境中看到此模式。
此格式基于设备的设置(由您当前的 Locale
表示)。您可以通过暂时更改您的设备设置来测试其他区域设置中的其他用户的外观。
我对手动调整格式化程序的语言环境 属性 以获得所需的输出持谨慎态度:当然,可以出于诊断目的这样做,但通常您不想更改格式化程序的语言环境(使用明显的例外是您需要一些不变的格式,例如,将结果存储在持久存储中或发送到服务器)。
始终使用设备的当前区域设置,以便尊重最终用户的数字格式设置。
我想在 1 之后用 1000 分隔,但我得到的分隔符是数字 >=10000 我是怎么做到的:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.string(for: myNumber)
我得到了什么:
(lldb) po formatter.string(for: 1000)
▿ Optional<String>
- some : "1000"
(lldb) po formatter.string(for: 10000)
▿ Optional<String>
- some : "10 000"
为什么1000没有分隔符?
听起来 NumberFormatter 中的 pl_PL 语言环境可能存在错误。我建议向 Apple 报告此问题。您可以在 macOS 上使用反馈助手应用程序。
您可以在技术上实施解决方法,即对语言环境进行硬编码或尝试进行您自己的格式设置,但强制所有用户使用特定格式通常不是好的做法。自行实施格式化可能会成为边缘案例的陷阱,并且容易出错。
你问:
why there is no separator in 1000?
这种在只有四位数字时省略分组分隔符的模式对于使用 space 作为分隔符的语言来说并不少见。
正如Exceptions to digit grouping所说:
The International Bureau of Weights and Measures states that “when there are only four digits before or after the decimal marker, it is customary not to use a space to isolate a single digit”.
您将在多个使用 space 作为分组分隔符的语言环境中看到此模式。
此格式基于设备的设置(由您当前的 Locale
表示)。您可以通过暂时更改您的设备设置来测试其他区域设置中的其他用户的外观。
我对手动调整格式化程序的语言环境 属性 以获得所需的输出持谨慎态度:当然,可以出于诊断目的这样做,但通常您不想更改格式化程序的语言环境(使用明显的例外是您需要一些不变的格式,例如,将结果存储在持久存储中或发送到服务器)。
始终使用设备的当前区域设置,以便尊重最终用户的数字格式设置。