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

时间:2015-05-02 05:59:57

标签: ios swift separator

我对Swift相当新,并且在寻找添加空间作为千分隔符的方法时遇到了很多麻烦。

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

  

2 358 000

而不是

  

2358000

例如,

我不确定是否应该格式化Int值,然后将其转换为String,或者在Int值转换为String后添加空格。任何帮助将不胜感激。

7 个答案:

答案 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}"

unicode spaces

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万