CGPoint 读数在 500,000,000 的极端坐标处不准确
CGPoint readout inaccurate at extreme coordinates of 500,000,000
为什么在 CGPoint 的极坐标处无法获得准确的读数?
例如,如果为 (500000250,500000100) 创建的 CGPoint 并且我使用 print(),我只会看到 x 和 y 的“5e+08”。当我使用数字格式化程序(见下文)并将科学记数法转换回小数时,我只得到 500000000 每个 x 和 y 是 250 和 100 不同步。
let coordinates = CGPointMake(500000250,500000100)
let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
let xCoord = numberFormatter.numberFromString("\(coordinates.x)")
let yCoord = numberFormatter.numberFromString("\(coordinates.y)")
我也试过:
let decimalValue = NSDecimalNumber(string: "\(coordinates.x)")
所有结果将读出为 500000000,并且该值不准确,因此无法存储以备将来使用。
我一定是漏了什么。
CGPoint 使用 CGFloat
作为 x 和 y 坐标。
在 32 位平台上 CGFloat
是 Float
类型,它有大约 6 位有效数字。在您的情况下,最后三位数字四舍五入。
如果您移动到 64 位平台,CGFloat
类型 Double
至少有 15 个有效数字。
如果您需要使用 15 位有效数字进行计算,请使用 Double 进行计算,然后在将其传递给 Core Graphics 时转换为 CGFloat。
为什么在 CGPoint 的极坐标处无法获得准确的读数?
例如,如果为 (500000250,500000100) 创建的 CGPoint 并且我使用 print(),我只会看到 x 和 y 的“5e+08”。当我使用数字格式化程序(见下文)并将科学记数法转换回小数时,我只得到 500000000 每个 x 和 y 是 250 和 100 不同步。
let coordinates = CGPointMake(500000250,500000100)
let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
let xCoord = numberFormatter.numberFromString("\(coordinates.x)")
let yCoord = numberFormatter.numberFromString("\(coordinates.y)")
我也试过:
let decimalValue = NSDecimalNumber(string: "\(coordinates.x)")
所有结果将读出为 500000000,并且该值不准确,因此无法存储以备将来使用。
我一定是漏了什么。
CGPoint 使用 CGFloat
作为 x 和 y 坐标。
在 32 位平台上 CGFloat
是 Float
类型,它有大约 6 位有效数字。在您的情况下,最后三位数字四舍五入。
如果您移动到 64 位平台,CGFloat
类型 Double
至少有 15 个有效数字。
如果您需要使用 15 位有效数字进行计算,请使用 Double 进行计算,然后在将其传递给 Core Graphics 时转换为 CGFloat。