【发布时间】:2016-09-27 03:53:55
【问题描述】:
double b = a / 100000;
b = (int) b;
b *= 100000;
上面的C代码是怎么转成Rust的?尤其是对数字进行四舍五入的第 2 行。
【问题讨论】:
标签: rust
double b = a / 100000;
b = (int) b;
b *= 100000;
上面的C代码是怎么转成Rust的?尤其是对数字进行四舍五入的第 2 行。
【问题讨论】:
标签: rust
这是 Rust 中的一个圆形示例。 您必须按照它们的类型编写数字常量: 例如,如果 d 是 f64 并且您想将其乘以 10,则正确的约定是: d * 10.0 代替: d * 10
并明确定义变量的类型,以在这种情况下使轮函数可用。
let a = 2e50;
let mut b : f64 = a / 100000.0;
b = b.round();
println!("{}", b);
【讨论】:
要将浮点数转换为整数,可以使用as。例如:
let b = (a / 100000.0) as i64;
【讨论】:
尤其是对数字进行四舍五入的第 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的round方法:
let b = ((a / 100_000.0).round() as i64) * 100_000;
请注意,还有trunc、ceil 和floor。您可以使用其中一种方法来精确控制发生的事情,而不是依赖演员表。 From the Rust book我们可以学习:
从浮点数转换为整数会将浮点数舍入为零。
此行为等同于trunc,但如果该行为对您来说确实很重要,您应该使用trunc 来...
【讨论】: