我有这个功能:
extension Float {
func shortenDecimals() -> Float {
println(self)
let a = self * 10.0
println(a)
let b = round(a)
println(b)
println(b/10.0)
return b / 10.0
}
}
这个函数应该做的是返回一个带有1个十进制的浮点数
这是打印出来的:
self : 0.0833333358168602
self * 10 : 0.833333373069763
round(a) : 1.0
b/10 : 0.100000001490116
我发现这非常令人沮丧,为什么它不会返回0.1?
答案 0 :(得分:3)
0.5是唯一一个“带有1位小数”的浮点数。当以十进制表示时,所有其他小数浮点数在点后面都有更多位数,因为浮点数的表示是二进制,而不是十进制。
二进制和十进制系统在表示整数时是等效的(它们都可以表示所有整数),但在表示小数值时则不然。以十进制表示的简单值绝对不能用二进制表示。此一般规则的例外情况为0.25,0.5,0.75,0.125,但不 0.1,这在二进制中无法准确表示。 0.100000001490116
显示Float
必须提供的最佳近似值的第一个数字。