go int 类型为什么不能和 float 直接比较?-灵析社区

一本正经写代码

个人:我目前主要是做前端开发,接触的第一门语言是 js,由于业务的需求,现在想补充一下 go 的后端知识。(刚学习 go 两天) 问题:了解到在 go 中,不能直接将 int 类型和 float 类型做比较,虽然明白静态语言相较于 js 来说对类型限制比较严格,但是类比到现实生活中还是无法理解这样设计的原因是什么? package main import "fmt" func main(){ age1:=1 age2:=3.3 fmt.Println(age1 age (mismatched types float64 and int) } 现实生活中我们不是早已习惯 1.2>1 或者 0.5<100 这样的小数和整数比较吗?为什么 go 要这样设计呢? 或者说如果允许 float 和 int 直接比较,会造成什么很难处理的场面吗?

阅读量:279

点赞量:8

问AI
如果你觉得"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语言,希望语言尽可能简单,不要有隐式转换,不要有函数重载。希望你自己显式转换,避免隐藏的问题