在Swift中添加千位分隔符到Int

我对Swift相当陌生,遇到了很多麻烦,想方设法将一个空格添加为千位分隔符。

我希望实现的是将计算结果显示在文本字段中,以便格式为:

2 358 000

代替

2358000

例如。

我不知道是否应该格式化Int值,然后将其转换为一个string,或将Int值转换为一个string后,添加空间。 任何帮助将不胜感激。

您可以使用NSNumberFormatter来指定一个不同的分组分隔符如下:

更新: Xcode 9•Swift 4

extension Formatter { static let withSeparator: NumberFormatter = { let formatter = NumberFormatter() formatter.groupingSeparator = " " formatter.numberStyle = .decimal return formatter }() } extension BinaryInteger { var formattedWithSeparator: String { return Formatter.withSeparator.string(for: self) ?? "" } } 

Xcode 8.3.2•Swift 3.1

 extension Formatter { static let withSeparator: NumberFormatter = { let formatter = NumberFormatter() formatter.groupingSeparator = " " formatter.numberStyle = .decimal return formatter }() } extension Integer { var formattedWithSeparator: String { return Formatter.withSeparator.string(for: self) ?? "" } } 

 let myInt = 2358000 let myIntString = myInt.formattedWithSeparator // "2 358 000" 

注意:如果您想要有一个宽度相同的空间,您可以使用"\u{2008}"

unicode空间

 formatter.groupingSeparator = "\u{2008}" 

你想使用NSNumberFormatter

 let fmt = NSNumberFormatter() fmt.numberStyle = .DecimalStyle fmt.stringFromNumber(2358000) // with my locale, "2,358,000" fmt.locale = NSLocale(localeIdentifier: "fr_FR") fmt.stringFromNumber(2358000) // "2 358 000" 

使用Swift 3,当你需要格式化数字的显示时, NumberFormatter是正确的工具。


NumberFormatter有一个名为numberStyle的属性。 可以将numberStyle设置为NumberFormatter.Style.decimal的值,以便将格式化程序的样式设置为十进制。

因此,在最简单的情况下,如果要用十进制样式格式化数字,则可以使用以下Playground代码:

 import Foundation let formatter = NumberFormatter() formatter.numberStyle = NumberFormatter.Style.decimal let amount = 2358000 let formattedString = formatter.string(for: amount) print(String(describing: formattedString)) 

根据用户当前的语言环境,此代码将为en_US打印Optional("2,358,000")或为Optional("2,358,000")打印Optional("2 358 000")


请注意,使用NumberFormatterlocale属性设置为Locale.current的以下代码段等同于以前的Playground代码:

 import Foundation let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.locale = Locale.current let amount = 2358000 let formattedString = formatter.string(for: amount) print(String(describing: formattedString)) 

下面使用NumberFormattergroupingSeparator属性设置为Locale.current.groupingSeparator的Playground代码也等同于前者:

 import Foundation let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.groupingSeparator = Locale.current.groupingSeparator let amount = 2358000 let formattedString = formatter.string(for: amount) print(String(describing: formattedString)) 

否则,如果您要使用特定的区域设置格式设置数字格式,则可以使用以下Playground代码:

 import Foundation let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.locale = Locale(identifier: "FR_fr") let amount = 2358000 let formattedString = formatter.string(for: amount) print(String(describing: formattedString)) // prints: Optional("2 358 000") 

但是,如果您真正想要实施特定的分组分隔符,则可以使用下面的Playground代码:

 import Foundation let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.groupingSeparator = " " let amount = 2358000 let formattedString = formatter.string(for: amount) print(String(describing: formattedString)) // prints: Optional("2 358 000") 

狮子座达布斯的答案翻译成斯威夫特3

进入任何.swift文件,从一个类:

 struct Number { static let withSeparator: NumberFormatter = { let formatter = NumberFormatter() formatter.groupingSeparator = " " // or possibly "." / "," formatter.numberStyle = .decimal return formatter }() } extension Integer { var stringWithSepator: String { return Number.withSeparator.string(from: NSNumber(value: hashValue)) ?? "" } } 

用法:

 let myInteger = 2358000 let myString = myInteger.stringWithSeparator // "2 358 000"