Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Rust中将浮点转换为整数_Rust - Fatal编程技术网

在Rust中将浮点转换为整数

在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 =

上面的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 = 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

  • 。。。用代码表达你的意图
  • 。。。具有有效的语义,即使Rust编译器更改了强制转换语义
  • let b = ((a / 100_000.0).round() as i64) * 100_000;