从 Excel 列获取指数值

Getting Exponential value from Excel column

我创建了一个读取 Excel sheet 的函数。所以 sheet 中有一个字段包含 0.01 的值,但是当我读取这个值时它会变成像这样的指数形式 1.2999999999999999E-2,所以当我通过时它会抛出异常数据表的值。

如何在代码中准确读取该值?

这是我阅读 Excel sheet -

的代码
        using (var sDoc = SpreadsheetDocument.Open(FileName, false))
        {

            bool emptyTable = false;

            var sheets = sDoc.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();
            var relationshipId = sheets.First().Id.Value;
            var worksheetPart = (WorksheetPart)sDoc.WorkbookPart.GetPartById(relationshipId);
            var workSheet = worksheetPart.Worksheet;
            var sheetData = workSheet.GetFirstChild<SheetData>();
            var rows = sheetData.Descendants<Row>().Skip(IgnoreRows).ToList();

            if (rows.Count == 0)
            {
                Results = dt;
                emptyTable = true;
            }

            if (!emptyTable)
            {
                foreach (var cell in rows.ElementAt(0).Cast<Cell>())
                {
                    dt.Columns.Add(GetCellValue(sDoc, cell));
                }

                foreach (var row in rows.Skip(1))
                {
                    bool emptyRow = true;
                    var tempRow = dt.NewRow();

                    for (var i = 0; i < row.Descendants<Cell>().Count(); i++)
                    {
                        string rowValue = GetCellValue(sDoc, row.Descendants<Cell>().ElementAt(i));
                        tempRow[i] = rowValue;
                        emptyRow = emptyRow && String.IsNullOrWhiteSpace(rowValue);
                    }

                    if (!emptyRow)
                    {
                        dt.Rows.Add(tempRow);
                    }
                    else
                    {
                        break;
                    }
                }
            }

这是异常值:

您可以尝试这样的操作(for 循环中的代码块)

string rowValue = GetCellValue(sDoc, row.Descendants<Cell>().ElementAt(i));

if (i == 5) // index of column where you're expecting that value
{
    decimal tempDecimal;
    decimal.TryParse(rowValue, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out tempDecimal);
    rowValue = tempDecimal.ToString("0.##");
}
tempRow[i] = rowValue;
emptyRow = emptyRow && String.IsNullOrWhiteSpace(rowValue)

基本上,代码试图将特定列(在我的示例中为 5)的值解析为十进制,然后将其转换回具有两位小数的字符串。