获取指数值
问题描述:
我创建的阅读Excel工作表函数所以在场先争优包含的0.01的值,但是当我看到它的值,改变成一些这样1.2999999999999999E-2指数形式时我通过DATATABLE用这个值,以便它抛出异常。所以我如何读取准确的值或避免在代码中。 这里是我的代码读取Excel工作表 -获取指数值
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)转换为十进制数,然后将其转换回带有两个小数点的字符串。
谢谢它的工作。 – Abhay