我有一个 gembox 库的实现,我正在从 excel 文件中读取数值。
例如,gembox 读取的值类似于 101.41179656982422 但如果我在单元格中打开 excel 值是 101.411796569824
我有一个 gembox 库的实现,我正在从 excel 文件中读取数值。
例如,gembox 读取的值类似于 101.41179656982422 但如果我在单元格中打开 excel 值是 101.411796569824
我相信我们找到了问题所在,让我们考虑以下示例代码:
var ef = new ExcelFile();
var ws = ef.Worksheets.Add("Sheet1");
double number = 0.12345678912345678;
ws.Cells["A1"].Value = number;
ef.Save("Sample.xlsx");
该number
变量具有 17 位小数精度。在 .NET Framework 中,System.Double 值具有最多 15 位十进制数字的精度,尽管内部维护最多 17 位数字,请参阅此处。
但在 MS Excel 中,数字精度最大限制为 15 位,请参见此处。
简而言之,在上面的示例中,生成的输出文件将包含所有 17 个十进制数字,但是当您使用 MS Excel 打开此文件时,它会将该值四舍五入为 15 个十进制数字。
为避免这种差异,您需要确保您的双精度值始终最多包含 15 个十进制数字,例如:
double number = 0.12345678912345678;
double roundedNumber = Convert.ToDouble(number.ToString());
ws.Cells["A1"].Value = roundedNumber;