2017-10-10 10 views
0

29000과 같은 숫자를 전달하는 경우와 같이 자릿수에 따라 숫자의 서식을 지정하려는 경우 29 K 으로 변환해야하며 전달 된 숫자가 290000이면 변환해야합니다. 수 는 현재 다음과 같은 방법으로 숫자로 형식을 지정하는 방법

func formatNumber (number: Double) -> String? { 
     let formatter = NSNumberFormatter() 
     formatter.maximumFractionDigits = 1 
     return formattedNumberString?.stringByReplacingOccurrencesOfString(".00", withString: "") 

및 사용

사용하여 메신저, 자리에 따라 다른 M/B/또는 뭔가 2.9이어야한다 :

let lblValue = Double(2500)/1000 
lbl.text = "\(formatNumber(lblValue)!)K" 

을하지만 주어진 유일한 작품이다 아니 첨자 모두 자동으로

답변

4

Apple의 ByteCountFormatter을 참조하십시오.

let formatter = ByteCountFormatter() 
formatter.allowsNonnumericFormatting = false 
let byteCount = 29000 
let string = formatter.string(fromByteCount: Int64(byteCount)) 
+0

내가 질문에 대한 우려는하지 바이트 수치를 포맷 가정 및 포맷터는 B (YTE)를 추가합니다 형식화 된 문자열의 끝까지. – danieltmbr

0

이 같은 손으로 할 필요가 :

func format(number: Double) -> String { 

    let sign = ((number < 0) ? "-" : "") 
    let num = fabs(number) 

    // If its only three digit: 
    if (num < 1000.0){ 
     return String(format:"\(sign)%g", num) 
    } 

    // Otherwise 
    let exp: Int = Int(log10(num)/3.0) 
    let units: [String] = ["K","M","B","T","P","E"] 

    let roundedNum: Double = round(10 * num/pow(1000.0,Double(exp)))/10 

    return String(format:"\(sign)%g\(units[exp-1])", roundedNum) 
} 

print(format(number: 999))  // Prints 999 
print(format(number: 1000))  // Prints 1K 
print(format(number: 290000)) // Prints 290K 
print(format(number: 290200)) // Prints 290.2K 
print(format(number: 3456200)) // Prints 3.5M 

출처 : iOS convert large numbers to smaller format

+0

감사합니다. 확인해 봅시다. 작동합니까? 아니요 –

+1

10 억 개의 'print (format (3456200000)) // Prints 3.5G'를 인쇄합니다. –

+0

단위 배열에서 G를 B로 바꿉니다. 내 편집 대답을 참조하십시오 – danieltmbr

관련 문제