我已经对例如货币处理进行了一些测试。去飞镖。基本上,我认为处理货币的最佳方法是将双精度数转换为整数,以便所有计算都使用整数进行,我认为这是公认的方式。但是,不同的语言对转换为整数的处理方式不同。例如,Go 会截断双精度,因此我认为有必要添加一个舍入因子来补偿。使用 Rust,我发现进行直接转换(见下文)似乎可行,但我不确定 Rust 是如何使用看似两种处理转换的替代方案实际处理转换的。
Rust 如何处理 f64 到 i64 的舍入,最好的使用方法是什么——“as i64”或“to_i64()”?
根据我所做的时间安排,这两种方法看起来并不相同,但结果可能相同。(“as i64”似乎稍微快了一点)。
示例(简化为仅使用 2 个小数位 - 单一货币):
fn fCcyDblToInt(dCcyAmt: f64) -> i64 {
// return (dCcyAmt * 100.0).to_i64();
return (dCcyAmt * 100.0) as i64;
}
首次发布后 14 小时编辑:
在做了更多测试之后,在我看来,以下是使用 Rust 处理将浮点数转换为整数的方法:
fn fCcyDblToInt(dCcyAmt:f64) -> i64 {
let dRound: f64 = if dCcyAmt > 0.0 { 0.5 } else if dCcyAmt < 0.0 {-0.5 } else {0.0};
// return ((dCcyAmt * 100.0) +dRound).to_i64();
return ((dCcyAmt * 100.0) +dRound) as i64;
}
我对此相当满意,因为这是我在其他地方处理它的方式,但我会测试更多。