【问题标题】:Convert float to integer in Rust在 Rust 中将浮点数转换为整数
【发布时间】:2016-09-27 03:53:55
【问题描述】:
double b = a / 100000;
b = (int) b;
b *= 100000;

上面的C代码是怎么转成Rust的?尤其是对数字进行四舍五入的第 2 行。

【问题讨论】:

    标签: rust


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      let b = (a / 100000.0) as i64;
      

      【讨论】:

        【解决方案3】:

        尤其是对数字进行四舍五入的第 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;
        

        如果你想取整而不是只取整数部分,你可以使用f64round方法:

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

        请注意,还有truncceilfloor。您可以使用其中一种方法来精确控制发生的事情,而不是依赖演员表。 From the Rust book我们可以学习:

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

        此行为等同于trunc,但如果该行为对您来说确实很重要,您应该使用trunc 来...

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-13
          • 1970-01-01
          相关资源
          最近更新 更多