我有一點從的Excel 2010工作表中讀取值的問題。OpenXML的2.0獲取錯誤的單元格的值
在一個標準的Excel工作表2010我有保留兩位小數和值1270,14 €
貨幣格式的單元格。
當我在OpenXML 2.0(C#代碼)上讀取此值時,我得到1270.1400000000001
而不是原來的1270.14
。
同樣與其他的值發生在具有相同的格式化的任何細胞。從細胞的OpenXML代碼
獲得值:
private string GetCellValue(string column, int row)
{
column = column.ToUpper();
var targetCell = cells.Where(p => p.CellReference == (column + row)).SingleOrDefault();
var value = String.Empty;
if (targetCell.DataType != null && targetCell.DataType.Value == CellValues.SharedString)
{
var index = int.Parse(targetCell.CellValue.Text);
value = cellValues[index].InnerText.Trim();
}
else
{
if (targetCell.CellValue != null)
{
value = targetCell.CellValue.Text.Trim();
}
else
{
value = null;
}
}
return value;
}
具體值越過「如果」數據類型不爲空狀態,並與線檢索值:
value = targetCell.CellValue.Text.Trim();
這怎麼解決?
爲什麼這個錯誤甚至可能嗎?
這已無關OpenXML的 - 這是使用「浮點運算」(在幾乎所有平臺,並與幾乎所有的語言)... Excel的格式不顯示值的一個固有的問題......你能做到相同... – Yahia 2012-01-04 21:03:32
@Yahia - 如果該值是某種計算結果,但沒有,則可能是正確的。 「1270,14」是預先編制爲小數點後兩位數的單元格中的一個數字。由於我沒有進行任何類型的計算\公式,我不認爲這裏存在「浮點算術」的問題。 – Gil 2012-01-10 16:29:06
你剛剛證明了我的觀點:單元格被格式化爲帶有2位小數的小數......但是當你從.NET訪問它時,你會得到一個double,而這又會容易產生任何「浮點算術」! – Yahia 2012-01-10 16:42:59