在Rust中将float转换为整数

时间:2016-05-29 05:53:30

标签: rust

pandas

上述C代码如何转换为Rust?特别是对数字进行舍入的第2行。

3 个答案:

答案 0 :(得分:27)

  

特别是对数字进行舍入的第2行。

首先:这不是真的。 “舍入”实数是为了返回最接近的整数。您只需将其转换为int即可丢弃所有非整数部分。

但是这里的Rust等同于您的确切代码(假设a的类型为f64):

let b = a / 100_000.0;    // underscore in number to increase readability
let b = b as i64;
let b = b * 100_000;

当然,这也可以写成一行:

let b = ((a / 100_000.0) as i64) * 100_000;

如果您想要舍入而不是仅使用整数部分,则可以使用f64的{​​{3}}方法:

let b = ((a / 100_000.0).round() as i64) * 100_000;

请注意,还有roundtruncceil。您可以使用其中一种方法来精确控制发生的事情,而不是依赖于强制转换。 floor我们可以学习:

  

从浮点数转换为整数会使浮点数向零舍入。

此行为相当于trunc,但如果行为对您很重要,则应使用trunc来...

  1. ...用代码表达你的意图
  2. ...即使Rust编译器更改了强制转换语义,也具有有效的语义

答案 1 :(得分:4)

要将浮点数转换为整数,可以使用as。例如:

let b = (a / 100000.0) as i64;

答案 2 :(得分:2)

这是Rust中的圆形示例。 您必须按照它们的类型编写数字常量: 例如,如果d是f64并且你想将它乘以10,那么正确的约定就是写: d * 10.0 代替: d * 10

并明确定义变量的类型,以便在这种情况下使圆函数可用。

let a = 2e50;
let mut b : f64 = a / 100000.0;
b = b.round();
println!("{}", b);