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
精度は 10 進数で 17 桁です。.NET Framework では、System.Double 値の精度は最大 15 桁ですが、内部では最大 17 桁が維持されます。こちらを参照してください。
ただし、MS Excel では、数値の精度の上限は 15 桁です。こちらを参照してください。
つまり、上記のサンプルでは、結果の出力ファイルには 17 桁の 10 進数がすべて書き込まれますが、このファイルを MS Excel で開くと、その値は 15 桁に丸められます。
この違いを回避するには、double 値が常に最大 15 桁の 10 進数であることを確認する必要があります。次に例を示します。
double number = 0.12345678912345678;
double roundedNumber = Convert.ToDouble(number.ToString());
ws.Cells["A1"].Value = roundedNumber;