반응형
숫자에 쉼표를 빠르게 추가하는 방법은 무엇입니까?
JSON에서 빠르게 검색하는 번호에 쉼표를 추가하려면 어떻게 해야 합니까?
Example
31908551587 to
31,908,551,587
저는 너무 혼란스럽고 어떻게 해야 할지 모르겠어요.
로 할 수 있습니다.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)
Ozgür Ersil의 답변을 확장하면 Int:로 확장하여 기능을 분리할 수 있습니다.
extension Int {
func withCommas() -> String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
return numberFormatter.string(from: NSNumber(value:self))!
}
}
그런 다음 코드에서 다음과 같이 사용합니다.
largeNumber.withCommas()
또한 Juan Fran Himenez의 답변을 확장하면 포맷터를 인스턴스화하는 것이 일반적으로 상대적으로 비용이 많이 들기 때문에 싱글톤으로 넣는 것을 권장합니다.(사용자가 쓰는 대로 이동 중에 포맷할 경우 성능에 영향을 미칠 수 있습니다.)
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)) ?? ""
}
}
확장을 통해 변수를 제공하는 확장의 단순한 감소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
이것은 쉼표 위치를 설정하는 추가적인 방법입니다.예를 들어 10000000이라는 숫자가 "1,00,00,000"으로 인쇄되기를 원합니다.
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.groupingSize = 3
numberFormatter.secondaryGroupingSize = 2
numberFormatter.string(from: 10000000)
양 텍스트 필드에 대한 클래스를 만들었습니다.텍스트 필드 클래스로 설정하기만 하면 됩니다.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)
}}
스위프트 4
let largeNumber = 31908551587
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let formattedNumber = numberFormatter.string(from: NSNumber(value:largeNumber))
스위프트 5
레이블에 사용하려는 경우:
private func formatNumberToThousand(number: Int) -> String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.groupingSeparator = "."
let formattedNumber = numberFormatter.string(from: NSNumber(value: number))
return formattedNumber ?? ""
}
사용 방법:
let thousand = 193843
yourLabel.text = formatNumberToThousand(number: thousand)
//Output: 193.843
언급URL : https://stackoverflow.com/questions/31021197/how-to-add-commas-to-a-number-in-swift
반응형
'itsource' 카테고리의 다른 글
getScript를 동시에 사용 (0) | 2023.08.05 |
---|---|
sp_addlinked server를 사용하여 서버를 추가하려면 다음과 같이 하십시오. (0) | 2023.08.05 |
PHP: 루프의 모든 N번째 반복을 어떻게 결정합니까? (0) | 2023.08.05 |
세션.지우기() vs.세션.모두 제거() (0) | 2023.08.05 |
파이썬의 구문에 새로운 문을 추가할 수 있습니까? (0) | 2023.08.05 |