NumberFormatter 在 Swift 中无法识别来自不同本地的数字 [关闭]

Posted

技术标签:

【中文标题】NumberFormatter 在 Swift 中无法识别来自不同本地的数字 [关闭]【英文标题】:NumberFormatter does not recognise numbers from different Local in Swift [closed] 【发布时间】:2022-01-22 00:23:38 【问题描述】:

NumberFormatter 无法识别已转换为当地货币的数字。例如如下所示的数字格式,

3,490,000.89 3 490 000,89 3.490.000,89

extension NumberFormatter 

    static func value(maximumFractionDigits: Int = 2) -> NumberFormatter 
        let formatter = NumberFormatter()
        formatter.locale = Locale.current
        formatter.numberStyle = .decimal
        formatter.maximumFractionDigits = maximumFractionDigits
        formatter.negativePrefix = "-"

        return formatter
    


【问题讨论】:

嗯,它只识别使用Locale.current 格式化的数字。 Locale.current 是什么? NumberFormatter.locale 需要匹配用于生成您尝试解析的格式化数字的区域设置。 我是英国人,但是当号码是 2,334 时。假设我在“2,334”到“2,3345”中添加了另一个数字,那么它似乎无法识别。我正在使用 combine 如果您将小数作为千位分隔符,则“2,3345”不是有效格式,因此预计会失败 【参考方案1】:

NumberFormatter 非常具体。它只会采用与其配置方式完全匹配的字符串。如果您将 numberFormatter 配置为使用逗号作为千位分隔符并使用点作为小数分隔符,它会将“1,234.56”转换为数字,而不是“1.234,56”(对于德国的语言环境来说这是预期的。 )

在您的问题中,您显示了以 3 种不同方式格式化的数字字符串。除非您在转换之间更改其设置(可能是区域设置),否则您将无法使用单个数字格式化程序将它们全部转换。

【讨论】:

问题已结束。我不清楚为什么甚至可以添加这个答案。但无论如何,回答别人无法回答的问题被认为是不好的形式。 @matt 我不认为它在我回答时已关闭。我没有任何我知道的特殊 SO 权力。 这个答案前半小时就关门了。也许有滞后。 这就是历史所显示的,但我不记得当我阅读并回复它时它显示为关闭。好奇。

以上是关于NumberFormatter 在 Swift 中无法识别来自不同本地的数字 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Swift3:如何用逗号写一个字符串?

如何在 SwiftUI 中使用 NumberFormatter?

如何在 Swift 中打印格式化的十进制值? [复制]

Swift IAP SK产品显示的价格错误

NumberFormatter 分组未按预期工作

在没有 NumberFormatter 的情况下停止 TextField 中的字符重复