从Excel中读取双倍" Excel方式"

时间:2017-09-29 15:05:54

标签: c# excel epplus

背景

我正在尝试从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文档。

1 个答案:

答案 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