背景
我正在尝试从Excel工作表中读取22 x 22矩阵。矩阵保持百分比值,每行的值必须总和为100%(或处理百分比值后面的数字时为1)。当我打开这样一个Excel工作表并在每一行上构建总和时,它总是100%(1)。完美。
但是当我阅读工作表并总结从工作表中读取的(双)值时,我在大多数行上得到一个显着的距离(显着意味着超过0.00000000001绝对距离为1)。
研究
我修改了excel中的矩阵,向我显示百分比值后面的数字,并将其与我使用EPPlus读取的数字进行比较。例如,我有
99.86%(Excel百分比)
0.998610811163197(Excel作为数字)
0.9986108111631975(使用EPPlus阅读)
我将我的Excel文档重命名为ZIP存档,解压缩并在Visual Studio中打开相应的表格。存储的值与我在EPPlus中获得的值完全相同 - 这并不令人惊讶。
解决方案吗
我决定以excel的方式运作,至少我认为excel是这样做的。我尝试将15位数后的值四舍五入。但有趣的是,结果与excel相同,更糟糕的是,在查看了我的其他一些价值观之后:
0.00%(Excel百分比)
0.00000330942432252678(Excel as number)
3.3094243225267778E-6(存储在XML中,通过EPPlus读取)
所以,问题是:有没有办法在Excel显示它们时从Excel中舍入或读取值?
以下是我阅读excel的代码:
using (ExcelPackage excel = new ExcelPackage())
{
excel.Load(File.OpenRead("data.xlsx"));
var a1 = excel.Workbook.Worksheets.First().Cells["A1"].Value;
var a2 = excel.Workbook.Worksheets.First().Cells["A2"].Value;
}
道歉,我目前无法将excel文件从我的工作场所上传到Dropbox或其他内容,我稍后会附上它。
编辑:here是Excel文档。
答案 0 :(得分:0)
如果我理解你的问题,你有显示双倍值的问题,对吗? 您可以使用正确的格式显示双精度值。例如:
double val = 99.8610811163198;
Console.WriteLine(val.ToString("P", CultureInfo.InvariantCulture));
关于此阅读MS文章:https://msdn.microsoft.com/en-us/library/kfsatb94(v=vs.110).aspx