gpt4 book ai didi

swift - 在 Swift 中从 Float 转换为 CGFloat

转载 作者:行者123 更新时间:2023-11-28 14:47:29 25 4
gpt4 key购买 nike

我正在转换 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 都会产生不同于 .35 的值,因为浮点格式使用二进制基数,因此必须使用 2 的幂(在本例中为 2 的负幂)来近似计算精确的数学值。

由于 float 格式使用的位数较少,因此其结果不太精确,在本例中也不太准确。 float 值为 0.3499999940395355224609375,double 值为 0.34999999999999997779553950749686919152736663818359375。

我并不完全熟悉 Swift,但我怀疑它用于将 CGFloat 转换为十进制(使用默认选项)的算法类似于:

  • 生成固定位数的小数位数,从 CGFloat 的实际值正​​确舍入到位数,然后抑制任何尾随零。例如,如果精确的数学值是 0.34999999999999997…,并且格式使用 15 位有效数字,则中间结果是“0.350000000000000”,然后将其简化为“0.35”。

floatdouble 的操作方式是:

  • 当转换为 double 时,.35 变为 0.34999999999999997779553950749686919152736663818359375。使用上述方法打印时,结果为“0.35”。
  • 当转换为 float 时,.35 变为 0.3499999940395355224609375。使用上述方法打印时,结果为“0.349999994039536”。

因此,floatdouble 值都不同于 .35,但是打印格式没有使用足够的数字来显示 double 的偏差 值,而它确实使用了足够的数字来显示 float 值的偏差。

关于swift - 在 Swift 中从 Float 转换为 CGFloat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50130007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com