为什么在CGPoint的极坐标处无法获得准确的读数?
例如,如果为(500000250,500000100)创建的CGPoint和我使用print(),我只看到x和y的“5e + 08”。当我使用数字格式化器(见下文)并将科学记数法转换回小数时,每个x和y只得到500000000,即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,并且该值无法存储以备将来使用,因为它不准确。
我一定错过了什么。
答案 0 :(得分:2)
CGPoint使用CGFloat
作为x和y坐标。
在32位平台CGFloat
上的类型为Float
,其中大约有6位有效数字。在您的情况下,最后三位数字将四舍五入。
如果您转移到64位平台CGFloat
,则类型Double
至少包含15位有效数字。
如果您需要使用15位有效数字进行计算,请在将其传递给Core Graphics时使用Double然后转换为CGFloat。