0

我有一个 gembox 库的实现,我正在从 excel 文件中读取数值。

例如,gembox 读取的值类似于 101.41179656982422 但如果我在单元格中打开 excel 值是 101.411796569824

4

1 回答 1

0

我相信我们找到了问题所在,让我们考虑以下示例代码:

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;
于 2016-10-18T07:20:20.437 回答