[英]Conversion from Float to CGFloat in Swift
我正在轉換Float
=> CGFloat
,它給了我以下結果。 為什么轉換后顯示為“ 0.349999994039536”,但在Double
=> CGFloat
可以正常使用?
let float: Float = 0.35
let cgFloat = CGFloat(float)
print(cgFloat)
// 0.349999994039536
let double: Double = 0.35
let cgFloat = CGFloat(double)
print(cgFloat)
// 0.35
將“ .35”轉換為float
並將“ .35”轉換為double
float
值都產生不同於.35的值,因為浮點格式使用二進制基數,因此必須使用2的冪(負數)來近似精確的數學值在這種情況下為2的冪)。
由於float
格式使用較少的位,因此其結果精度不高,在這種情況下,精度也不高。 float
值為0.3499999940395355224609375, double
精度值為0.349999999999999999997779553950749686919152736663818359375。
我並不完全熟悉Swift,但是我懷疑它用來將CGFloat
轉換為十進制(帶有默認選項)的算法類似於:
CGFloat
的實際值四舍五入到正確的數字,然后抑制任何尾隨零。 例如,如果精確的數學值為0.34999999999999997…,並且格式使用15個有效數字,則中間結果為“ 0.350000000000000”,然后將其縮寫為“ 0.35”。 這與float
和double
一起運行的方式是:
double
,.35變成0.3499999999999999777955393950749686919152736663818359375。 使用上述方法打印時,結果為“ 0.35”。 float
,.35變為0.3499999940395355224609375。 使用上述方法打印時,結果為“ 0.349999994039536”。 因此, float
和double
float
值都不同於0.35,但是用於打印的格式沒有使用足夠的數字來顯示double
float
值的偏差,而在打印格式中卻使用了足夠的數字來顯示float
值的偏差。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.