因爲我注意到Float
和CGFloat
在32位和64位設備上的行爲不同,這可能會導致錯誤,所以我嘗試用我的項目中的CGFloat
替換所有Float
值。但我無法想出一個方法將CGfloat
的值截斷爲小數點後的兩位數字。如何截斷CGFloat值?
在我的項目中,我有一個函數,下載文件會不斷返回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
值具有不同的輸出。如果「測試」是Float
值,結果將是0.39,這是正確的,但如果我將其更改爲CGFloat
,結果將爲「0.00」。
誰能幫我明白髮生了什麼,並告訴我如何正確地截斷CGFloat
值?我試過NSNumberFormatter
,但它不工作(現在)。
謝謝!
注意,相同的舍入可以簡單地用'讓浮子=輪來實現(100.0 *浮動(進度))/ 100.0',比較http://stackoverflow.com/questions/28328615/is-there-an-efficient三通至圓-A-float到所述最接近的-百分之一佈局中-SW。 – 2015-04-02 07:09:19
您還應該知道,由於這些類型使用的二進制表示形式,浮點類型Float/Double/CGFloat中沒有一個可以完全表示數字0.39 *。計算結果實際上是0.38999998569488525391,但println()將輸出精度限制爲六位十進制數字。 – 2015-04-02 07:18:31