翻譯|行業(yè)資訊|編輯:胡濤|2024-11-13 10:07:18.040|閱讀 93 次
概述:這個標題簡潔明了,能夠準確表達文章內容的核心,即討論 .NET 和 .NET Core 3.0 在浮點計算上的變化以及如何應對這些差異。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在 .NET Core 3.0 中,對浮點解析和格式進行了更改,以符合 IEEE 754-2008 標準。您可以閱讀有關這些更改的更多信息。在使用 Stimulsoft 產(chǎn)品時,這些更改最常表現(xiàn)為舍入數(shù)字和出現(xiàn)“負號”零。
Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于創(chuàng)建報表和儀表板的通用工具集。該產(chǎn)品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他環(huán)境的完整工具集。無需比較產(chǎn)品功能,Stimulsoft Ultimate包含了所有內容!
負號零和正號零在數(shù)學分析中用作負無窮小量和正無窮小量的常規(guī)符號。在典型的編程任務中,常規(guī)零就足夠了,但一些高級數(shù)學計算需要這些區(qū)別。為了解決這個問題,引入了“負號零”。
負零是四舍五入負數(shù)的結果。例如,以前,Math.Round(-0.01, 0)的結果為“0”,但現(xiàn)在為“-0”。在格式化數(shù)字(數(shù)字、貨幣、百分比格式)時也會出現(xiàn)這種情況,因為在格式化過程中使用了四舍五入。從數(shù)學上講,這種方法更準確。然而,從編程的角度來看,這被認為是一個“重大變化”,因為四舍五入操作的標準行為已經(jīng)改變,并且沒有直接的方法來禁用這種修改。
為了解決出現(xiàn)負零的問題,我們修改了 .NET Core 系列產(chǎn)品,默認情況下,負號零被替換為常規(guī)零。但是,如果您的計算仍然需要負零,則可以通過設置StiOptions.Engine.AllowNegativeZero = true選項來啟用它。
.NET Core 3.0 中的一項改進涉及對浮點數(shù)語法分析的更改。這種改進的原因在于數(shù)字在 float 和 double 類型中的存儲方式。這些數(shù)字以二進制形式存儲,僅在四舍五入或顯示在屏幕上時轉換為十進制。例如,數(shù)字“0.0045”實際上以“0.00449999999999999996”之類的形式存儲在內存中。然后,在顯示時,一種特殊的方法會從此二進制表示形式“恢復”原始數(shù)字。因此,不可能用 float 和 double 類型精確表示十進制數(shù) - 它們總是會包含一定程度的誤差。以前
,這些數(shù)字轉換的算法與 IEEE 754-2008 標準中指定的算法不同,這導致不同系統(tǒng)上的計算結果不同。現(xiàn)在,隨著 .NET Core 3.0 中的更新,計算結果符合標準。但是,與早期版本相比,這可能會導致不同的結果,這也會影響標準 Round 函數(shù),可能產(chǎn)生與以前不同的結果。
這給一些同時維護 .NET Framework 和 .NET Core 版本產(chǎn)品的客戶帶來了問題,因為他們現(xiàn)在看到兩個版本的結果不同。請注意!
為確保計算結果在不同環(huán)境中一致且可預測,我們建議使用以下方法:在所有關鍵計算中,將類型轉換為十進制。這將保證準確的舍入并最大限度地減少任何計算中的錯誤。修改多個報告很容易,但有些用戶遇到需要重新制作許多以前創(chuàng)建的報告的情況。針對這種情況,我們添加了一個新選項:
StiOptions.Engine.ForceConversionToDecimalInTextFormat = false;
默認情況下,此選項處于禁用狀態(tài)。如果將其設置為 true,則在以“數(shù)字”、“貨幣”和“百分比”格式格式化文本時,浮點數(shù)和雙精度參數(shù)將自動轉換為十進制,以提高舍入精度。
要實現(xiàn)銀行舍入,您需要使用標準Math.Round函數(shù)中的MidpointRounding.AwayFromZero參數(shù)。為了方便起見,我們之前已將此參數(shù)添加到我們的自定義Round函數(shù)中。根據(jù)用戶請求,我們還可以設置此參數(shù)的默認值,這樣您就不必更新所有報告模板。為此,您可以配置以下選項:
StiOptions.Engine.MidpointRounding = MidpointRounding.AwayFromZero;
通過使用上述選項,您可以管理計算準確性并避免將產(chǎn)品遷移到 .NET 時出現(xiàn)的潛在問題。想要了解Stimulsoft Reports 報價信息的朋友,歡迎咨詢。
加入官方社群 740060302,歡迎相互交流
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn