0
私はgemboxライブラリを実装しており、Excelから数値を読み込んでいます。Gemboxは異なるdouble値を読み取っています
ザ・はgemboxが101.41179656982422のように読み取りますが、私は、セルの値でExcelを開いた場合、私たちは、問題が何であったかを考え出したと信じてい101.411796569824
私はgemboxライブラリを実装しており、Excelから数値を読み込んでいます。Gemboxは異なるdouble値を読み取っています
ザ・は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では、内部で最大17桁の数字が維持されますが、System.Doubleの値は15桁までの精度を持ちます。hereを参照してください。
しかし、MS Excelでは、数値精度の上限は15桁です。hereを参照してください。
簡潔に言えば、結果の出力ファイルには17桁の小数点がすべて書き込まれますが、このファイルをMS Excelで開くと、その値は小数点以下15桁に丸められます。
この違いを回避するには、double値が常に最大15桁の小数点以下を持つことを確認する必要があります。
double number = 0.12345678912345678;
double roundedNumber = Convert.ToDouble(number.ToString());
ws.Cells["A1"].Value = roundedNumber;