将千位分隔符“˙”添加到浮点数

5
我正在处理从0.00到9999.99的数字范围。我需要添加“˙”作为千位分隔符,因此1300,00应该变成1˙300,00。NSNumberFormatter使用“,”作为分隔符,所以对我来说不好用。我尝试使用
func formatNumber (i: Float) -> String {
    var counter = 0
    var correctedNumber = ""

    if i > 999 {
        for char in "\(i)".characters {
            if counter == 1 {
                correctedNumber += "˙" + "\(char)"
            } else {
                correctedNumber += "\(char)"
            }

            counter++
        }
    } else {
        correctedNumber = "\(i)"
    }

    return correctedNumber
}

但它不能格式化小数。

正确的方式是什么?


1
你不能使用 NSNumberFormattergroupingSeparator 属性来配置它以使用你选择的分隔符吗? - pbasdf
是的!我不知道.groupingSeparator的存在,太好了!谢谢你! - Matte.Car
1
通常情况下,您不应该篡改这些值。它们会自动设置为用户设置的语言环境(locale)。如果用户的语言环境使用逗号作为分组分隔符,请不要在那里放置不同的字符,这只会让用户感到困惑。也许仅仅设置一个特定的 .locale,例如 formatter.locale = NSLocale(localeIdentifier: "it_IT") 会更好? - Sulthan
2个回答

9

您只需要正确配置NSNumberFormatter即可。

let formatter = NSNumberFormatter()
formatter.groupingSeparator = "˙"
formatter.decimalSeparator = ","
formatter.usesGroupingSeparator = true
formatter.minimumFractionDigits = 2

测试

formatter.stringFromNumber(1300) // "1˙300,00"

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Matte.Car
@Matte.Car:您可以使用“groupingSize”属性设置组的大小。例如,使用“formatter.groupingSize = 2”,您将获得“13˙00,00”的结果。而使用“formatter.groupingSize = 1”,您将获得“1˙3˙0˙0,00”的结果。 - Luca Angeletti
但是如果我需要使用不同大小的组,例如1000(三位数的组而不是单个数字),我可以使用NSNumberFormatter吗? - Matte.Car
@Matte.Car:我不这么认为。但如果您可以描述如何计算组的大小(第一组的大小,第二组的大小等等),我想我可以定义一个函数来按您的要求格式化数字。 - Luca Angeletti
我已经写了一个函数来处理奇怪的格式,如果NSNumberFormatter能够做到这一点,我会浪费很多时间! - Matte.Car

2

虽然设置特定的decimalSeparatorgroupingSeparator可以实现你想要的效果,但这并不是最好的方式。

NSNumberFormatter总是根据当前语言环境选择格式。如果语言环境设置为英语(通常为en-US),则小数分隔符将为,,分组分隔符将为.

这样,如果在美国的用户打开应用程序,则他们将看到针对他们正确格式化的数字。如果在欧洲的用户打开应用程序,则他们也将看到正确格式化的数字(根据其设备设置指定)。

如果你真的希望应用程序有一个特定的数字格式,则可以明确地设置语言,例如:

let formatter = NSNumberFormatter()
formatter.locale = NSLocale(localeIdentifier: "it_IT")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接