![](/img/trans.png)
[英]How to determine correct CGFloat values for desired UIImage Crop iOS 8.4
[英]How to truncate CGFloat values?
由於我注意到Float
和CGFloat
在32位和64位設備上的行為不同,這可能會導致錯誤,因此我嘗試在項目中用CGFloat
替換所有Float
值。 但是我想不出一種方法來將CGfloat
值截斷為小數點后的2位數字。
在我的項目中,我具有一個下載文件的函數,該函數不斷返回Float
值“ progress”,指示已下載了總文件的百分比,通常類似於“ 0.3942183693039206”。 在這種情況下,我需要將數字截斷為“ 0.39”,以便可以更新UI,這是我的功能:
func updatePropertiesForPorgress(progress:CGFloat){
dispatch_async(dispatch_get_main_queue(), { () -> Void in
let truncated = NSString(format: "%.2f", progress)
let float = truncated.floatValue
self.progressTileView.rating = CGFloat(float)
})
}
它與Float
值完美配合,但是如果我將進度作為CGFloat
值傳遞,則截斷的變量將等於“ 0.00”:
出於好奇,我試圖在操場上復制情況,並成功地做到了。 代碼很簡單:
var test:CGFloat = 0.3920394829459
let truncated = NSString(format: "%.2f", test)
let float = truncated.floatValue
根據“測試”變量是Float
還是CGFloat
值,其輸出將有所不同。 如果“ test”是一個Float
值,結果將是0.39,這是正確的,但是如果我將其更改為CGFloat
,結果將是“ 0.00”。
誰能幫助我了解發生了什么,並告訴我如何正確截斷CGFloat
值? 我試過NSNumberFormatter
但是(目前)不起作用。
謝謝!
NSString(format:_: ...)
接受CVarArgType
s:
extension NSString {
convenience init(format: NSString, _ args: CVarArgType...)
但是,從Swift 1.1開始, CGFloat
本身不符合CVarArgType
。 當傳遞給NSString(format:_: ...)
,它將轉換為NSNumber
。
因此, NSString(format: "%.2f", test)
等同於NSString(format: "%.2f", test as NSNumber)
。 結果, %.2f
為0.00
您應該將其顯式轉換為Double
:
NSString(format: "%.2f", Double(test))
請注意:從Swift 1.2開始,由於CGFloat
符合CVarArgType
,因此您的代碼按CVarArgType
工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.