我已经对例如货币处理进行了一些测试.去和飞镖.基本上,我认为处理货币的最佳方法是将双精度转换为整数,以便所有计算都是使用整数进行的,我认为这是可接受的方式.但是,不同的语言会将转换视为不同的整数.例如,Go截断双打因此,我认为有必要添加舍入因子来补偿.使用Rust,我发现执行直接转换(见下文)似乎有效,但我不确定Rust实际上如何处理转换使用似乎是处理转换的两种替代方法.
Rust如何处理f64到i64的舍入以及使用的最佳方法 - "as i64"或"to_i64()"?
基于我所做的时间,这里的两种方法看起来并不相同,但结果可能是.("因为i64"出现的速度略快).
示例(简化为仅使用2个小数位 - 单一货币):
fn fCcyDblToInt(dCcyAmt: f64) -> i64 {
// return (dCcyAmt * 100.0).to_i64();
return (dCcyAmt * 100.0) as i64;
}
Run Code Online (Sandbox Code Playgroud)
在做了一些更多的测试之后,以下对我来说是使用Rust处理float到整数的转换的方法:
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;
}
Run Code Online (Sandbox Code Playgroud)
我对此非常满意,因为这是我在其他地方处理它的方式,但是我会测试更多.
| 归档时间: |
|
| 查看次数: |
3352 次 |
| 最近记录: |