如何在swift中将逗号添加到数字?
Posted
技术标签:
【中文标题】如何在swift中将逗号添加到数字?【英文标题】:how to add commas to a number in swift? 【发布时间】:2015-06-24 08:13:29 【问题描述】:如何将逗号添加到我从 swift 中的 JSON 检索的数字中。
Example
31908551587 to
31,908,551,587
我很困惑,我不知道该怎么办。
【问题讨论】:
【参考方案1】:你可以用NSNumberFormatter
做到这一点
斯威夫特 4
let largeNumber = 31908551587
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let formattedNumber = numberFormatter.string(from: NSNumber(value:largeNumber))
斯威夫特 3
let largeNumber = 31908551587
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = NumberFormatter.Style.decimal
let formattedNumber = numberFormatter.string(from: NSNumber(value:largeNumber))
斯威夫特 2
let largeNumber = 31908551587
let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
let formattedNumber = numberFormatter.stringFromNumber(largeNumber)
【讨论】:
有什么方法可以使用 NumberFormatter 来做这样的 '31,90,85,51,587' 吗? @SanketBhavsar 我不这么认为check @ÖzgürErsil 我用货币(风格)做到了 如何做反向 有什么方法可以将 1000000000000000 转换为 1,000,000,000,000,000 吗?因为这些适用于数字后的七个 0...【参考方案2】:扩展 Özgür Ersil 的回答,您可以通过扩展至 Int 来隔离功能:
extension Int
func withCommas() -> String
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
return numberFormatter.string(from: NSNumber(value:self))!
然后在您的代码上使用:
largeNumber.withCommas()
【讨论】:
【参考方案3】:还扩展了 Juan Fran Jimenez 的回答,我建议将格式化程序放入单例中,因为实例化格式化程序通常是一项相对昂贵的操作。 (如果您在用户写入的同时进行格式化,可能会影响性能。)
extension Int
private static var commaFormatter: NumberFormatter =
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter
()
internal var commaRepresentation: String
return Int.commaFormatter.string(from: NSNumber(value: self)) ?? ""
【讨论】:
【参考方案4】:一个简单的扩展插件,将通过Int
的扩展提供一个变量。
正如 Julien 的回答中所述,出于性能原因,这使用了静态格式化程序。
extension Int
private static var numberFormatter: NumberFormatter =
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
return numberFormatter
()
var delimiter: String
return Int.numberFormatter.string(from: NSNumber(value: self)) ?? ""
使用它:
let number = 31908551587
print(number.delimiter) // 31,908,551,587
【讨论】:
???您的代码实际上与朱利安的答案相同。唯一不同的是他有internal var
,而你只有var
。你的回答对谈话有什么影响?另外,我会说您的变量 delimiter
具有误导性。 Julien 的commaRepresentation
更有用。【参考方案5】:
这是另一种设置逗号位置的方法。假设我希望将数字 10000000 打印为“1,00,00,000”
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.groupingSize = 3
numberFormatter.secondaryGroupingSize = 2
numberFormatter.string(from: 10000000)
【讨论】:
当数字包含点 10000000.12 时,此代码不起作用【参考方案6】:斯威夫特 4
let largeNumber = 31908551587
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let formattedNumber = numberFormatter.string(from: NSNumber(value:largeNumber))
【讨论】:
【参考方案7】:我为金额文本字段创建了一个类。只需将其设置为您的文本字段类。 Ex- 输入 1234567。它将转换为 1,234,567 也适用于小数输入,小数点后取两位数。
class AmountField: UITextField
private var isFirstDecimal : Bool = true
override func willMove(toSuperview newSuperview: UIView?)
addTarget(self, action: #selector(editingChanged), for: .editingChanged)
keyboardType = .decimalPad
textAlignment = .left
placeholder = "0.0"
editingChanged()
override func deleteBackward()
var currentText = self.text ?? ""
currentText = String(currentText.dropLast())
self.text = currentText
editingChanged(self)
@objc func editingChanged(_ textField: UITextField? = nil)
var doubleStr = textField?.text ?? "00"
let decimalCount = doubleStr.components(separatedBy: ".")
if decimalCount.count > 2
var currentText = self.text ?? ""
currentText = String(currentText.dropLast())
self.text = currentText
return
if doubleStr.contains(".") && isFirstDecimal == true
self.text = doubleStr
isFirstDecimal = false
return
else if !(doubleStr.contains("."))
isFirstDecimal = true
let doubleStrTemp = doubleStr.replacingOccurrences(of: ",", with: "")
if doubleStrTemp != ""
if let n = Decimal(string: doubleStrTemp )?.significantFractionalDecimalDigits
if n > 2
var currentText = self.text ?? ""
currentText = String(currentText.dropLast())
self.text = currentText
return
doubleStr = doubleStr.replacingOccurrences(of: ",", with: "")
let doube = Double(doubleStr)
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = NumberFormatter.Style.decimal
if doube != nil
let formattedNumber = numberFormatter.string(from: NSNumber(value:doube!))
self.text = formattedNumber
extension Decimal
var significantFractionalDecimalDigits: Int
return max(-exponent, 0)
【讨论】:
不,我正在使用 NSNumberFormatter。对于十进制和其他验证,我设置了单独的条件。以上是关于如何在swift中将逗号添加到数字?的主要内容,如果未能解决你的问题,请参考以下文章
REACT - 如何在 Mui-Datatables 中将逗号分隔符添加到整数值