首页 > 解决方案 > Go float vs uint64 比较问题

问题描述

处理一个比较浮点数和 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)中的任何值时,比较有效。

标签: gofloating-point

解决方案


推荐阅读