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