[英]Emulate Excel Numeric Precision C# .NET
Excel具有IEEE 754規范的修改版本,以實現數值精度。 有關Excel如何進行計算的更多信息,請參見此處 。
在我的C#.NET中 ,其他語言以不同的方式實現數值精度。 因此,當您嘗試模擬電子表格時,最終會遇到一些精度不匹配的情況。
打開Excel並將此公式插入任何單元格中:
=1+1/9000-1.
然后,您會注意到結果與通過以下公式獲得的結果不同:
=1/9000
我不想更改Excel的這種行為,我只想模仿它。
現在,在C#中創建一個簡單程序,並使用Decimal
數進行相同的計算。 我使用小數表示數字。 但這可能是我們的Float的兩倍,結果將是相同的。
decimal result = 1.0M + 1.0M / 9000.0M - 1.0M;
Console.WriteLine(result.ToString("N30"));
C#有什么方法可以模擬Excel的數值精度。 這樣我就可以得到與Excel相同的結果?
正如@DStanley所提到的,使用double解決了上面的示例,但是在其他情況下它仍然不起作用,例如:
Excel中:
=1+0.000000000000001665280326829110-1
0.000000000000000000000000000000
C#:
double result = 1.0 + 0.000000000000001665280326829110 - 1.0;
Console.WriteLine(result.ToString("N30"));
0.000000000000001554312234475220
如果要模擬浮點數學運算,請使用double
而不是decimal
。 decimal
旨在以速度為代價給出更准確的以10為底的表示形式。 如果在C#中使用double
,則得到的結果與Excel相同(至少對於示例來說,可能還會有其他邊緣情況的行為有所不同):
C#:
double result = 1.0 + 1.0 / 9000.0 - 1.0;
Console.WriteLine(result.ToString("N30"));
0.000111111111111173000000000000
Excel中:
=1+1/9000-1
0.000111111111111173000000000000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.