簡體   English   中英

在Swift中從Float轉換為CGFloat

[英]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”。

這與floatdouble一起運行的方式是:

  • 轉換為double ,.35變成0.3499999999999999777955393950749686919152736663818359375。 使用上述方法打印時,結果為“ 0.35”。
  • 轉換為float ,.35變為0.3499999940395355224609375。 使用上述方法打印時,結果為“ 0.349999994039536”。

因此, floatdouble float值都不同於0.35,但是用於打印的格式沒有使用足夠的數字來顯示double float值的偏差,而在打印格式中卻使用了足夠的數字來顯示float值的偏差。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM