在Rust中将浮点转换为整数
上面的C代码是如何转换为Rust的?尤其是对数字进行四舍五入的第2行。这是一个锈色中的四舍五入示例。 您必须按照数值常量的类型写入数值常量: 例如,如果d是f64,您希望将其乘以10,则正确的约定是写入: d*10.0 而不是: d*10 并显式定义变量的类型,以使round函数在这种情况下可用在Rust中将浮点转换为整数,rust,Rust,上面的C代码是如何转换为Rust的?尤其是对数字进行四舍五入的第2行。这是一个锈色中的四舍五入示例。 您必须按照数值常量的类型写入数值常量: 例如,如果d是f64,您希望将其乘以10,则正确的约定是写入: d*10.0 而不是: d*10 并显式定义变量的类型,以使round函数在这种情况下可用 double b = a / 100000; b = (int) b; b *= 100000; 要将浮点转换为整数,可以使用。例如: let a = 2e50; let mut b : f64 =
double b = a / 100000;
b = (int) b;
b *= 100000;
要将浮点转换为整数,可以使用。例如:
let a = 2e50;
let mut b : f64 = a / 100000.0;
b = b.round();
println!("{}", b);
尤其是对数字进行四舍五入的第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;
如果要舍入而不是只取整数部分,可以使用f64
的方法:
let b = (a / 100000.0) as i64;
let b = ((a / 100_000.0) as i64) * 100_000;
请注意,还有,和。您可以使用这些方法中的一种来精确控制所发生的事情,而不是依赖于强制转换。我们可以学到: 从浮点数转换为整数将使浮点数向零舍入 此行为相当于
trunc
,但如果该行为对您有影响,您应该使用trunc
来
let b = ((a / 100_000.0).round() as i64) * 100_000;