2016-10-14 2 views

ответ

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 цифр, см. here.
Но в MS Excel максимальный предел точности чисел составляет 15 цифр, см. here.

Итак, в приведенном выше примере результирующий выходной файл будет содержать все 17 десятичных цифр, но при открытии этого файла с помощью MS Excel он будет округлять это значение до 15 десятичных цифр.
Чтобы избежать этой разницы вам необходимо убедиться, что ваши двойные значения всегда имеют максимум 15 десятичных цифр, например:

double number = 0.12345678912345678; 
double roundedNumber = Convert.ToDouble(number.ToString()); 
ws.Cells["A1"].Value = roundedNumber; 
Смежные вопросы