我尝试在Go中获得2.4/0.8 == 3
w:=float64(2.4)
fmt.Println(math.Floor(w/0.8),math.Floor(2.4/0.8) )
Run Code Online (Sandbox Code Playgroud)
它给了我"2 3".
问题是为什么math.Floor(w/0.8)不给我3.它是浮点数的精度限制吗?
是的,这是精度限制.float64非常精确,但2.4不能完全以二进制形式存储.当两个数字都是常量时,计算在编译时以更高的精度完成,当结果舍入到float64时,它精确到3.但是当其中一个数字是变量时,必须进行计算在运行时,它出现在2.9999999999999996,其中Floor截断为2.