Swift 中的内插字符串中的数字是否受语言环境影响?

Are numbers in interpolated strings in Swift affected by the locale?

Swift 中的内插字符串是否受语言环境影响?

所以,例如,如果我有:

let beanCount : Int = 10
let s : String = "I have \(beanCount) beans"

即使在可能使用非拉丁字母的地方,这是否总是会在每个语言环境中提供以下内容?

I have 10 beans

对于可以使用小数点分隔符的浮点数也是如此吗?

如果它确实改变了,但我希望它被修复,我如何才能确保一个标准格式?

编辑:

再澄清一下我的问题:

我在这种情况下(虽然我没有说清楚)特别关注基本类型,例如整数类型(IntUInt32Int8,等),尽管浮动的地方也很有趣。

我的用例并不是真正用于生成字符串以呈现给用户,而是用于生成字符串供应用程序内部使用,例如作为文件名、加密密钥、密码或字典键。

在这种情况下,我不希望生成的值受到语言环境的影响,我真的只对基本类型感兴趣。

我知道至少一种插值取决于语言环境的类型:NSNumber(在 Linux 上):https://bugs.swift.org/browse/SR-789。 link 是一个名为 "NSNumber.description returns a localized version (e.g. with commas) on Linux" 的问题,表明 NSNumber 在 Linux.

上有一个本地化的(1000 -> “1,000”)插值

但是,我认为这是一个将被修复的实际错误,因为我对你的问题的回答是字符串插值 不会受到语言环境的影响。

现在,当然,因为类型通过 CustomStringConvertible 协议控制它们的插值,一些 类型可以决定插值以语言环境敏感的方式。

但是 Swift 标准库和 Foundation 中的类型没有。

插值使用 CustomStringConvertible 协议,因此我们可以说这完全取决于给定类型的实现。

为确保标准格式,请勿依赖 description,它始终主要用于调试目的。

如果您想向用户显示一个字符串,那么对于数字,请使用 NSNumberFormatter 系统或预设语言环境。如果您使用日期,请使用 NSDateFormatter.

您可能认为您不会遇到整数格式问题,但如果您有 3000000 个 bean 怎么办?您当前的实现将打印 3000000 但您实际想要的是 3 000 0003.000.0003'000'000 (取决于语言环境)。始终使用数字格式化程序,几乎总是应该使用系统区域设置。