簡體   English   中英

Excel 2007中的數值-表示與基礎xml文件中的存儲

[英]Numerical values in Excel 2007 - representation vs storage in the underlying xml file

此問題與.NET和OpenXml有關。

我已經看完以下文章,它有很好的解釋,但不能回答我的問題: Excel 2007與基礎xml文件中數值的可視化不一致

在我的應用程序中,用戶正在上傳Excel(.xls / .xlsx),並且正在使用OpenXML SDK進行解析。

解析工作正常,除了一些值。 Excel存儲的值與在某些情況下輸入的值不同。 以下是用戶輸入內容與底層xml中存儲內容的一些示例:

+--------------------+-----------------------+--------------------+
| User Entered Value | Excel Displayed Value | Stored XML Value   |
+--------------------+-----------------------+--------------------+
| 4.1                | 4.1                   | 4.0999999999999996 |
+--------------------+-----------------------+--------------------+
| 4.4                | 4.4                   | 4.4000000000000004 |
+--------------------+-----------------------+--------------------+
| 19.99              | 19.99                 | 19.989999999999998 |
+--------------------+-----------------------+--------------------+

我使用OpenXML在.NET中解析此excel時遇到了問題。 OpenXML讀取這些值作為存儲為XML值的值。 因此,即使用戶輸入了4.1,OpenXML仍將其讀取為4.09999999999999999996。 現在,根據我在此excel上運行的驗證之一,我需要檢查小數點。 我真的無法驗證用戶在這種情況下輸入了什么。

任何幫助是極大的贊賞 !! 由於OpenXml是Microsoft提供的SDK,因此我沒有嘗試過其他Excel閱讀器,但是歡迎提出任何建議。

這是表示浮點類型數據的正確方法。 您可以按照以下代碼段進行驗證。

運行以下代碼,

string s = "4.0999999999999996";

Console.WriteLine(float.Parse(s)); 
// output 4.1

string s1 = "4.4000000000000004";

Console.WriteLine(float.Parse(s1)); 
// output 4.4

string s2 = "19.989999999999998";

Console.WriteLine(float.Parse(s2)); 
// output 19.99

因此,嘗試parse這些值,您將獲得預期的真實值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM