在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")
。
请注意,使用NumberFormatter
的locale
属性设置为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))
下面使用NumberFormatter
的groupingSeparator
属性设置为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"