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精度は 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;
于 2016-10-18T07:20:20.437 に答える