2012-12-10 73 views
31

我想NSLog兆的數量我NSData對象然而目前所有我能得到的是字節使用從字節轉換NSData的長度,以兆

NSLog(@"%u", myData.length); 

那麼我將如何改變這個NSLog聲明,所以我可以看到類似於

2.00 megs

任何幫助,將不勝感激。

+0

我該如何格式化它,以便在它後面出現兩個小數位。 – HurkNburkS

回答

111

有1024個字節的千字節和兆字節1024千字節,所以......

NSLog(@"File size is : %.2f MB",(float)myData.length/1024.0f/1024.0f); 

你要知道,這是一個簡單的方法是不能真正正確適應字節大小低於1,048,576字節或超過1,073,741,823字節。對於可以處理不同的文件大小更完整的解決方案,請參閱:ObjC/Cocoa class for converting size to human-readable string?

或爲OS X 10.8+和iOS 6+

NSLog(@"%@", [[NSByteCountFormatter new] stringFromByteCount:data.length]); 

在斯威夫特:

print(ByteCountFormatter().string(fromByteCount: Int64(data.count))) 
+1

很酷,感謝一羣工作..我感到困惑的想法,我必須有括號等,但這完美的工作! :) – HurkNburkS

+1

如果你需要顯示給用戶,那麼不要使用字符串格式。相反,使用NSNumberFormatter。這將格式化用戶的區域設置。 – rmaddy

+0

快速和手。這很有幫助 – Alix

13

對於斯威夫特3,在Mb中:

let countBytes = ByteCountFormatter() 
countBytes.allowedUnits = [.useMB] 
countBytes.countStyle = .file 
let fileSize = countBytes.string(fromByteCount: Int64(dataToMeasure!.count)) 

print("File size: \(fileSize)")