我对Swift相当新,并且在寻找添加空间作为千分隔符的方法时遇到了很多麻烦。
我希望实现的是获取计算结果并将其显示在文本字段中,以便格式为:
2 358 000
而不是
例如,2358000
。
我不确定是否应该格式化Int值,然后将其转换为String,或者在Int值转换为String后添加空格。任何帮助将不胜感激。
答案 0 :(得分:96)
您可以使用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}"
formatter.groupingSeparator = "\u{2008}"
答案 1 :(得分:29)
您想使用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"
答案 2 :(得分:14)
使用Swift 4.2,当您需要格式化数字显示时,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")
,为 fr_FR 打印Optional("2 358 000")
。
请注意,以下使用设置为NumberFormatter
的{{1}} locale
属性的代码段与之前的Playground代码相同:
Locale.current
下面使用设置为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))
的{{1}} groupingSeparator
属性的Playground代码也与前者相同:
NumberFormatter
否则,如果要使用特定的区域设置格式样式设置数字格式,可以使用以下Playground代码:
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))
答案 3 :(得分:6)
Leo Dabus的回答翻译为 Swift 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"
答案 4 :(得分:0)
尝试一下
func addPoints(inputNumber: NSMutableString){
var count: Int = inputNumber.length
while count >= 4 {
count = count - 3
inputNumber.insert(" ", at: count) // you also can use ","
}
print(inputNumber)
}
通话:
addPoints(inputNumber: "123456")
结果:
123 456(或123,456)
答案 5 :(得分:0)
我正在寻找一种货币格式,例如$ 100,000.00 我完成了这样的自定义实现Leo Dabus的实现
extension Formatter {
static let withSeparator: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyGroupingSeparator = ","
formatter.locale = Locale(identifier: "en_US") //for USA's currency patter
return formatter
}()
}
extension Numeric {
var formattedWithSeparator: String {
return Formatter.withSeparator.string(for: self) ?? ""
}
}
答案 6 :(得分:0)
代码:
//5000000
let formatter = NumberFormatter()
formatter.groupingSeparator = " "
formatter.locale = Locale(identifier: "en_US")
formatter.numberStyle = .decimal.
输出:
500万