2017-09-29 7 views
0

背景読書、二重の「Excelの道」

。行列はパーセント値を保持し、各行の値は100%の合計を持つ必要があります(パーセント値の後ろの数値を扱う場合は1)。このようなExcelワークシートを開いて各行に合計を作成すると、常に100%(1)になります。完璧。

しかし、私がワークシートを読み、シートから読み取った(ダブル)値を集計すると、ほとんどの行で1に有意な距離が得られます(重要な意味は、絶対的な距離が1から0.00000000001以上です)。

調査

私は私のパーセント値の後ろに番号を表示するには、Excelの行列を修正し、私はEPPlusを使用して読んだにそれを比較しました。たとえば、私は

99.86パーセントを持っていた(パーセントでエクセル)

0.998610811163197(番号などエクセル)

0.9986108111631975(EPPlusを読む)

私はAに私のExcelドキュメントを名前を変更ZIPをアーカイブし、解凍してVisual Studioでシートを開きました。保存された値は、私がEPPlusで得た値とまったく同じものでしたが、それは本当に驚くことではありませんでした。

解決策?

私はがExcelと同じように動作することを決めました。少なくとも、私はそれがとても優れていると思っていました。。私は15桁の後に値を丸めようとしました。しかし、十分に面白い、結果は私が持っていたいくつかの他の値を見た後、さらに悪化Excelのと同じではありませんでした:

0.00パーセント(%はエクセル)

0.00000330942432252678(番号などエクセル)

3.3094243225267778E-6(EPPlusを介して読み出さ、XMLに格納されている)

だから、質問は:Excelがそれらを表示するようExcelから値を丸めるまたは読み取りする方法は何ですか?ここで

は、Excelを読み取るための私のコードです:

 using (ExcelPackage excel = new ExcelPackage()) 
     { 
      excel.Load(File.OpenRead("data.xlsx")); 
      var a1 = excel.Workbook.Worksheets.First().Cells["A1"].Value; 
      var a2 = excel.Workbook.Worksheets.First().Cells["A2"].Value; 
     } 

謝罪、私は後でそれを添付します、Dropboxのか、他の何かに私の職場から、現時点でExcelファイルをアップロードすることはできませんよ。

編集:hereはExcelドキュメントです。

+0

は、なぜあなたは1×10^-16小数点以下を得るために悩ませていますか?地球から太陽までの距離を測定すると15ナノメートルに相当します。 – Enigmativity

+0

@Enigmativityは、**私は**迷惑だと言った。私はそれを気にする必要があります。金融部門では、このような差はセント、合計で百万に達しています...そして、私が書いたように、私は行列を得ます。各行の合計は100%でなければなりません。これは.NET(/ XML)ではなくExcelで行います。 – MiGro

+0

それをクリアしてください。あなたの質問はそれをしません。おそらく[尋ねる]を読んでいますか? – Enigmativity

答えて

0

私はあなたの質問を理解していれば、二重値の表示に問題はありますか? 二重値を表示するための正しい書式を使用できます。例えば:このについて

double val = 99.8610811163198; 
Console.WriteLine(val.ToString("P", CultureInfo.InvariantCulture)); 

は、MSの記事を読む:https://msdn.microsoft.com/en-us/library/kfsatb94(v=vs.110).aspx

+0

いいえ、値の表示には問題ありません。それは内部的にそれらと一緒に働くExcelとして値を読み取るの問題です。 – MiGro

+0

あなたのExcelファイルでは、表示にパーセント形式を使用します。 セルの書式を取得または設定できます。 NumberFormatプロパティは、これを助けます。 A1セルには「0,00%」があります。 – as94