2016-10-14 4 views
0

私はgemboxライブラリを実装しており、Excelから数値を読み込んでいます。Gemboxは異なるdouble値を読み取っています

ザ・はgemboxが101.41179656982422のように読み取りますが、私は、セルの値でExcelを開いた場合、私たちは、問題が何であったかを考え出したと信じてい101.411796569824

答えて

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では、内部で最大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; 
関連する問題