如何将浮点数舍入到指定的位数?

时间:2015-02-22 06:55:56

标签: rust

如何将Rust中的f64浮点数舍入到指定的位数?

2 个答案:

答案 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);
}

playground

这会打印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的文档中有更多有关语法的示例。