ali*_*ego 47 separator ios swift
我对Swift相当新,并且在寻找添加空间作为千分隔符的方法时遇到了很多麻烦.
我希望实现的是获取计算结果并将其显示在文本字段中,以便格式为:
2 358 000
代替
2358000
例如.
我不确定是否应该格式化Int值然后将其转换为String,或者在Int值转换为String后添加空格.任何帮助将不胜感激.
Leo*_*bus 109
您可以使用NSNumberFormatter指定不同的分组分隔符,如下所示:
更新:Xcode 9•Swift 4
extension Formatter {
static let withSeparator: NumberFormatter = {
let formatter = NumberFormatter()
formatter.groupingSeparator = " "
formatter.numberStyle = .decimal
return formatter
}()
}
Run Code Online (Sandbox Code Playgroud)
Xcode 8.3.2•Swift 3.1
extension Numeric {
var formattedWithSeparator: String {
return Formatter.withSeparator.string(for: self) ?? ""
}
}
Run Code Online (Sandbox Code Playgroud)
2358000.formattedWithSeparator // "2 358 000"
2358000.99.formattedWithSeparator // "2 358 000.99"
let int = 2358000
let intFormatted = int.formattedWithSeparator // "2 358 000"
let decimal: Decimal = 2358000
let decimalFormatted = decimal.formattedWithSeparator // "2 358 000"
let decimalWithFractionalDigits: Decimal = 2358000.99
let decimalWithFractionalDigitsFormatted = decimalWithFractionalDigits.formattedWithSeparator // "2 358 000.99"
Run Code Online (Sandbox Code Playgroud)
注意:如果您希望使用具有相同宽度的空间,则可以使用 "\u{2008}"
extension Integer {
var formattedWithSeparator: String {
return Formatter.withSeparator.string(for: self) ?? ""
}
}
Run Code Online (Sandbox Code Playgroud)
Air*_*ity 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"
Run Code Online (Sandbox Code Playgroud)
Ima*_*tit 18
使用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))
Run Code Online (Sandbox Code Playgroud)
根据用户的当前区域,这段代码将打印Optional("2,358,000")为EN_US或Optional("2 358 000")为fr_FR时.
请注意,以下使用NumberFormatters 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))
Run Code Online (Sandbox Code Playgroud)
使用设置NumberFormatter的groupingSeparator属性的下面的Playground代码Locale.current.groupingSeparator也等同于前者:
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))
Run Code Online (Sandbox Code Playgroud)
否则,如果要使用特定的区域设置格式样式设置数字格式,可以使用以下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")
Run Code Online (Sandbox Code Playgroud)
但是,如果您真正想要的是强制执行特定的分组分隔符,则可以使用下面的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")
Run Code Online (Sandbox Code Playgroud)
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)) ?? ""
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
let myInteger = 2358000
let myString = myInteger.stringWithSeparator // "2 358 000"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29925 次 |
| 最近记录: |