如何将浮点数四舍五入到指定位数?
How does one round a floating point number to a specified number of digits?
Rust中如何将f64浮点数四舍五入到指定位数?
如果您只想将其用于显示目的,请使用 formatting syntax built into println!()
。例如,要打印四舍五入到小数点后两位的数字,请使用 {:.2}
格式说明符:
fn main() {
let x = 12.34567;
println!("{:.2}", x);
}
如果要将四舍五入的数字放入字符串中,请使用 format!()
macro。
如果你想舍入一个数字并将结果作为另一个数字返回,然后将该数字乘以给定的 10 次方,调用 round
,然后除以相同的次方,例如要舍入到小数点后两位,请使用 102 = 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
是十的次方,例如上例中的 100)将在乘法中变为无穷大,并在乘法之后保持无穷大。但是,f64
不能表示大于 253 的任何小数位(即它们始终是整数),因此可以将如此大的数字特例化为 return他们自己。
添加到@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 的文档有更多语法示例。
如果不需要打印,使用math::round。来自 libmath.
https://docs.rs/libmath/0.1.4/math/round/index.html
use math::round;
let rounded = round::floor(3.14159, 3);
assert_eq!(rounded, 3.141);
let rounded = round::ceil(3.14159, 3);
assert_eq!(rounded, 3.142);
Rust中如何将f64浮点数四舍五入到指定位数?
如果您只想将其用于显示目的,请使用 formatting syntax built into println!()
。例如,要打印四舍五入到小数点后两位的数字,请使用 {:.2}
格式说明符:
fn main() {
let x = 12.34567;
println!("{:.2}", x);
}
如果要将四舍五入的数字放入字符串中,请使用 format!()
macro。
如果你想舍入一个数字并将结果作为另一个数字返回,然后将该数字乘以给定的 10 次方,调用 round
,然后除以相同的次方,例如要舍入到小数点后两位,请使用 102 = 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
是十的次方,例如上例中的 100)将在乘法中变为无穷大,并在乘法之后保持无穷大。但是,f64
不能表示大于 253 的任何小数位(即它们始终是整数),因此可以将如此大的数字特例化为 return他们自己。
添加到@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 的文档有更多语法示例。
如果不需要打印,使用math::round。来自 libmath.
https://docs.rs/libmath/0.1.4/math/round/index.html
use math::round;
let rounded = round::floor(3.14159, 3);
assert_eq!(rounded, 3.141);
let rounded = round::ceil(3.14159, 3);
assert_eq!(rounded, 3.142);