在Zig 0.11.0中如何对两个usize类型执行浮点除法
在Zig 0.11.0中如何对两个usize类型执行浮点除法
嘿,我刚好碰到过类似的问题,来帮你搞定这个Zig里的浮点转换问题!
你遇到的错误核心在于Zig 0.11.0版本中,@floatFromInt需要显式指定目标浮点类型——因为usize的大小是和平台相关的(32位或64位),编译器没办法自动推断你要转成f32还是f64。
正确的写法
把你的loadFactor函数改成下面这样就可以正常工作了:
pub fn loadFactor(self: Self) f32 { if (self.entries == 0) return 0.0; // 直接返回浮点0更简洁直观 return @floatFromInt(f32, self.entries) / @floatFromInt(f32, self.capacity); }
为什么之前的尝试失败?
- 你第一次用
@floatFromInt(self.entries)时,没指定目标浮点类型,编译器无法确定转换后的类型,因此报错; - 用
@as(f32, self.entries)不行,因为Zig不允许直接把整数类型强制转换成浮点类型,必须使用专门的整数转浮点转换函数; @floatCast是用来在不同浮点类型之间转换的(比如f64转f32),不是用来处理整数转浮点的,所以用错了工具。
额外小提示
当entries为0时,直接返回0.0比用@floatFromInt(0)更简洁,结果也是完全一致的。
备注:内容来源于stack exchange,提问作者Eric B
相关产品推荐
相关产品推荐

