0

XBase スタイルの言語 (この場合は FoxPro)のレガシー コードを C#.NET に変換する必要があります。書き直しから同じ出力を得たいのですが、丸めの不一致が私を狂わせています。Decimal.Round(MidpointRounding)を単独で試してみましたが、中間点 = 5 の状況では、独自の「切り上げ」関数も作成する必要があることがわかりました。

それが機能すれば問題ありませんが、私が見ているのは、場合によっては FoxPro 出力に同意するために「切り上げ」メソッドが必要であるが、実際には他の場合に不一致が生じるということです。データベース クエリは乗算と除算を行っていますが、2 つのシステム間で計算上の不一致が蓄積されているかどうか疑問に思っています。

これは、矛盾していると思われるものの例です。各ペアの初期値は、LINQ クエリの出力から取得されます。これらを考慮して、表示されている FoxPro の結果と同じ丸められた結果を生成したいと考えています。

.NET LINQ Query result: 7.0477049103806673503597572093.
FoxPro rounding: 7.0

.NET LINQ: 7.2499596595318807183725770943.
FoxPro rounding: 7.3

完全に厄介なハックに頼らずに、レガシーシステムから値を正確に複製する方法について何か提案はありますか?

4

1 に答える 1

1

問題は、浮動小数点の精度に関係している可能性があります。FoxPro プログラムがラウンドする前に、どのタイプの変数に値を格納しますか? そして、どのタイプを使用しますか?

FoxPro プログラムが C# よりも精度の低い浮動小数点数を使用している場合 (またはその逆)、これが矛盾の原因である可能性があります。

于 2012-11-30T21:08:05.740 に答える