正在解决一个比较浮点数和 uint64 的问题,其中浮点数等于 MaxUint64+1。比较适用于浮点文字。但是,当将浮点数分配给变量时,比较会中断。
func main() {
x := 18446744073709551616.0
fmt.Println(x == 18446744073709551616.0) //true
fmt.Println(18446744073709551616.0 > math.MaxUint64) //true
fmt.Println(x > math.MaxUint64) //false
}
https://play.golang.org/p/O65padWxV8L
进一步挖掘表明,并非所有浮点数 > MaxUint64 都会出现此问题。当 x 分配给 18446744073709553665.0(或 MaxUint64+2050)中的任何值时,比较有效。