我有两个值:n: f64
和p: i32
,我需要计算n * 10^p
。
我尝试了两种方法:
- 使用乘法和
f64::powi
- 使用
format!()
和f64::from_str
后者更准确(见下面的输出(,但显然效率低下。有没有一种方法可以在不经过字符串转换的情况下获得相同的精度?这是我的代码:
fn main() {
let f1 = |n: f64, e: i32| n * 10f64.powi(e);
let f2 = |n: f64, e: i32| format!("{}e{}", n, e).parse::<f64>().unwrap();
for &n in &[1.1, 2.2, 3.3, 4.4] {
for &e in &[-2, 2] {
println!("{} {}", f1(n, e), f2(n, e));
}
}
}
输出:
0.011000000000000001 0.011
110.00000000000001 110
0.022000000000000002 0.022
220.00000000000003 220
0.033 0.033
330 330
0.044000000000000004 0.044
440.00000000000006 440
游乐场
一如既往,它有一个板条箱:rust_decimal这并不完全是你想要的,但它为你的任务增加了所需的精度,而不需要格式化。也许试试吧,不幸的是,它不可能在操场上使用。