2012-11-30 84 views
0

我有一個需要在XBase-style語言(本例中爲FoxPro)中採用遺留代碼並將其轉換爲C#.NET。我想從我的重寫中獲得相同的輸出結果,但舍入差異正在使我瘋狂。我試過Decimal.Round(MidpointRounding)獨自一人,但發現我也需要爲中點= 5情況編寫自己的「向上取整」功能。XBase語言舍入奇怪

這樣可以,如果它工作正常,但我所看到的是在某些情況下需要我的「收尾」方法來同意FoxPro輸出,但實際上會在其他方面產生差異。數據庫查詢正在進行一些乘法和除法運算,我想知道兩個系統之間的數學差異是否正在累積。

下面是一個我認爲是不一致的例子。每對的初始值來自我的LINQ查詢的輸出。考慮到這些,我想生成一個四捨五入的結果是相同的FoxPro的結果顯示:

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

.NET LINQ: 7.2499596595318807183725770943. 
FoxPro rounding: 7.3 

任何建議,我怎麼能完全複製從舊系統不出來訴諸完全kludgey黑客的價值?

+0

您正在使用哪個版本的Foxpro。我在VFP中嘗試了你的LINQ結果,並且將它作爲一個變量(未指定的顯式類型),作爲一個硬循環(7.2499 ....,1),以及作爲強類型十進制,正確舍入爲7.2,設置變量到7.2499 ... - (全長),他們都舍入到7.2 – DRapp

回答

1

您的問題可能與浮點精度有關。在FoxPro程序結束之前,它存儲哪個類型的變量值?你用什麼類型?

如果FoxPro程序使用的精度低於您在C#中執行的浮點數(反之亦然),則這可能是您看到的差異的原因。

+0

請看我上面修改的問題。我並沒有完全放棄,因爲我沒有提到正在完成的數學計算,所以我不能說FoxPro中的輸入是完全相同的。在回答你的問題時,我在.NET中使用了十進制類型。 FoxPro代碼沒有明確的類型聲明。 – Buggieboy