如何将Rust中的f64浮点数舍入到指定的位数?
答案 0 :(得分:22)
如果您只想将其用于显示目的,请使用formatting syntax built into println!()
。例如,要打印一个舍入到2位小数的数字,请使用{:.2}
格式说明符:
fn main() {
let x = 12.34567;
println!("{:.2}", x);
}
如果要将四舍五入的数字放在字符串中,请使用format!()
macro。
如果要对数字进行舍入并将结果作为另一个数字返回,则将该数字乘以给定的10的幂,调用round
,并除以相同的幂,例如要舍入到2位小数,请使用10 2 = 100。
fn main() {
let x = 12.34567_f64;
let y = (x * 100.0).round() / 100.0;
println!("{:.5} {:.5}", x, y);
}
这会打印12.34567 12.35000
。
如果在编译时不知道小数位数,可以使用powi
来有效地计算相关功率。
请注意,这将分解为非常大的数字;具体地说,大于std::f64::MAX / power
的数字(其中power
是10的幂,例如上面例子中的100)将在乘法中变为无穷大,并且在之后保持无穷大。但是,f64
不能代表大于2 53 的数字的任何小数位(即它们总是整数),所以可以通过特殊情况将这样大的数字返回给自己。
答案 1 :(得分:10)
要添加到@huon的一个很好的答案,如果您想舍入一个浮点数用于显示目的,但您不知道编译时的精度,则可以使用精度格式语法如下:
fn main() {
let precision = 3;
let x = 12.34567;
println!("{:.1$}", x, precision); // prints 12.346 and works with `format!` as well
}
std::fmt的文档中有更多有关语法的示例。