2017-10-10 91 views
0

我想根据数字格式对数字进行格式化,例如,如果我通过数字如29000,那么数字应该转换为29 K ,如果通过数字是290000 ..转换数量应该是2.9 M/B /或根据数字别的东西, 目前即时通讯使用以下方式如何在ios中格式化数字

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

和使用说明:

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

这将打印'print(format(3456200000))//打印3.5G'数十亿。 –

+0

用单位数组中的B替换G.请参阅我编辑的答案 – danieltmbr