我在我的项目中使用浮点值。当我尝试访问Project时,它会扩展到1 /十亿的十进制数,但是当涉及到游乐场时,它可以很好地工作。
在xcodeproj中:
let sampleFloat: Float = 0.025
print(sampleFloat) // It prints 0.0250000004
在游乐场:
let sampleFloat: Float = 0.025
print(sampleFloat) // It prints 0.025
有什么线索在这里发生了什么?如何在xcodeproj中避免扩展?
答案 0 :(得分:1)
很多评论,但没有人发布所有信息作为答案。
答案是在内部,浮点数用二进制幂2表示。
在基数10中,十分位数表示该值中有多少1/10。百分数表示该值中有多少1/100,千分之一数字表示该值中有多少1/1000,依此类推。在基数10中,您不能完全代表1/3。那是0.33333333333333333 ......
在二进制浮点中,第一个小数二进制数字表示该值中有多少1/2。第二个数字表示该值中有多少1/4,下一个数字表示该值中有多少1/8,依此类推。有一些(很多)十进制值无法在二进制浮点中精确表示。值0.1(1/10)是一个这样的值。这将近似于1/16 + 1/32 + 1/256 + 1/512 + 1/4096 + 1/8192。
值0.025是另一个无法在二进制浮点中精确表示的值。
有一个备用数字格式,NSDecimalNumber
(Swift 3中的Decimal
)使用十进制数字来表示数字,因此它可以精确表示任何十进制值。 (请注意,它仍然无法准确表达1/3的分数。)