如果你觉得`1`比`1.2`小,那`33554431`和`33554432.99`呢?`1234567999`和`1234567888.88`呢? 后两个问题在C语言中用32位浮点数计算,结果是相等。原因是整数与浮点数直接比较,或是通过字面量给浮点类型赋值,C语言会进行一个隐式转换,而最终转换的结果有时候会不符合直觉,比如像上面两个例子那样。`1234567999`和`1234567888.88`最后都是`1234567936.000000`。 这个问题通常在整数大于`1<<25`时出现,因为32位浮点数尾数只有23位置,能表示24的整数,超过这个数就会面临精度丢失的问题,比如`33554433(1<<25+1)`,最后会转换成`33554432.00`。 Go作为新时代的C语言,希望语言尽可能简单,不要有隐式转换,不要有函数重载。希望你自己显式转换,避免隐藏的问题