【发布时间】:2018-03-11 12:45:58
【问题描述】:
背景
我正在尝试从 Excel 工作表中读取 22 x 22 矩阵。该矩阵包含百分比值,并且每行的值的总和必须为 100%(或在处理百分比值后面的数字时为 1)。当我打开这样的 Excel 工作表并在每一行上建立总和时,它总是 100% (1)。完美。
但是当我阅读工作表并总结从工作表中读取的(双)值时,我在大多数行上都得到了与 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 为数字)
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 文档。
【问题讨论】:
-
你为什么要麻烦得到 1x10^-16 的小数位?在测量从地球到太阳的距离时,它相当于 15 纳米。
-
@Enigmativity 谁说我很烦。我不得不打扰它。在金融领域,这样的差异总和高达几美分,高达数百万……正如我所写,我得到了一个矩阵。每行总和必须达到 100%,这在 .NET (/XML) 中没有,但在 Excel 中。
-
然后说清楚。你的问题没有做到这一点。也许阅读How to Ask?