double b = a / 100000;
b = (int) b;
b *= 100000;
上面的C代码是如何转换成Rust的?尤其是对数字进行四舍五入的第#2行.
double b = a / 100000;
b = (int) b;
b *= 100000;
上面的C代码是如何转换成Rust的?尤其是对数字进行四舍五入的第#2行.
尤其是对数字进行四舍五入的第#2行.
首先,这不是真的."四舍五入"实数就是返回最接近的整数.只需将其转换为int
,即可丢弃所有非整数部分.
但以下是与您的确切代码对应的代码(假设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
来...