为何在CGPoint的极坐标时无法获得精确读数?CGPoint读数在极限坐标500,000,000处不准确
例如,如果为(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)")
所有结果将读出为5亿和值不能储存以备将来使用,因为它是不准确的。
我必须缺少一些东西。
32位或64位平台?在32位平台上,CGFloat是Float,只有约6位有效数字。 - 你真的必须将数字转换为字符串并返回吗? –
[为什么浮点数的分辨率从原点进一步下降?](http://gamedev.stackexchange.com/q/23848) –
Martin R:你说得对,我想将数值存储在数据库中作为字符串但可以使用数字来代替,但是如果我尝试将coordinates.x转换为Int或任何其他数字类型,则通过几点不准确。即:Int(coordinates.x)将返回500000256而不是500000250.我显然不明白数字类型是如何工作的,因此需要进行更多的挖掘。 – Silverstar