11

たとえば、通貨処理の小さなテストを行いました。ゴーアンドダーツ。基本的に、通貨を処理する最善の方法は、すべての計算が整数を使用して行われるようにするために double を整数に変換することであり、それが受け入れられている方法だと思います。ただし、整数への変換の扱いは言語によって異なります。たとえば、Go は double を切り捨てるため、丸め係数を追加して補正する必要があると思います。Rust を使用して、単純な変換 (以下を参照) が機能しているように見えますが、Rust が変換を処理するための 2 つの代替方法のように見えるものを使用して実際に変換を処理する方法がわかりません。

Rust は f64 から i64 への丸めをどのように処理しますか? また、「as i64」または「to_i64()」を使用するのに最適な方法は何ですか?

私が行ったタイミングに基づいて、ここでの 2 つの方法は同一ではないように見えますが、結果は同一である可能性があります。(「as i64」はわずかに高速に見えました)。

例 (小数点以下 2 桁のみを使用するように単純化 - 単一通貨):

fn fCcyDblToInt(dCcyAmt: f64) -> i64 {
 //  return (dCcyAmt * 100.0).to_i64(); 
 return (dCcyAmt * 100.0) as i64;
}

最初の投稿から 14 時間後に編集:

さらにテストを行った後、Rustを使用してfloatからintegerへの変換を処理する方法は次のように思われます。

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;      
}

私は他の場所でそれを処理したので、私はそれでかなり快適ですが、もう少しテストします.

4

1 に答える 1