将 i32 转换为 f32

Convert i32 into f32

提问人:Marian Klösler 提问时间:1/19/2023 更新时间:8/8/2023 访问量:506

问:

如何在 Zig Language 中将 i32 转换为 f32?

我想计算 for 循环中值的出现次数,然后以平滑浮点数的形式获取百分比。

var partial : i32 = 0;
var total : i32 = 2000;
  

for (arr[0..total]) |value| {
    if(value < 200) inCircle = inCircle +  1;
}

const result = partial / total;
类型转换 之字形

评论


答:

3赞 sigod 1/19/2023 #1

锯齿 0.11+

使用@floatFromInt

const result = @as(f32, @floatFromInt(partial)) / @as(f32, @floatFromInt(total));

如果您对是否需要使用 @as 感到困惑:请参阅结果位置语义此答案

锯齿 0.10

您需要使用@intToFloat功能。喜欢这个:

const result = @intToFloat(f32, partial) / @intToFloat(f32, total);

评论

0赞 Marian Klösler 1/19/2023
谢谢,这就是我一直在寻找的转换方法。您能提供文档链接吗?
1赞 sigod 1/19/2023
@CitrusPunk 答案是:ziglang.org/documentation/master/#intToFloat
0赞 sigint 9/10/2023
我确实明白明确很重要,但 0.10 => 0.11 的变化感觉......详细。这有设计原理吗?
1赞 sigod 9/10/2023
@sigint 0.11 的更改使代码更加精简,但作为副作用,代码在某些情况下变得更加冗长。请参阅答案和 0.11 更新日志的这一部分。