2017-11-13 11 views
1

C#アプリケーションでExcel式を翻訳していますが、Visual Studioで異なる結果が返されます。同じExcel式がVisual Studioで異なる結果を返すC#

LSBT = (0.085 - (0.0023 * (28 * (((4400 - 3600)/63) - 12.857)))); 

Excelで使用した場合、それが返されます:

0.095213022 

とVisual Studioで、それこれは、式(Iは、ハードデバッグ用のExcelとVisual Studioの両方の値を持つ変数をコード化している)であります返品:

0.14019079999999995 

+0

ファーアウトあなたは正しいです! –

+0

ええ、特に浮動小数点値を持つデータ型について言及する必要があります。私の変数は二重で、それは十進法 – Bilal

答えて

4

問題は精度の低下です。

数値リテラルを記述するとき、コンパイラはそれをintとして表現することを前提としており、式でこれらのリテラルを使用すると精度が低下する可能性があります。精度を失った値を倍数にするか分割すると、最終結果がオフになることがあります。

問題を回避するには、すべての数値リテラルを浮動小数点型として宣言します。この例では、Mという接尾辞を付けて表現して、decimalという変数にしています。

public class Program 
{ 
    public static void Main() 
    { 
     var a = (0.085 -(0.0023*(28*(((4400 - 3600)/63)-12.857)))); 
     var b = (0.085M -(0.0023M*(28M*(((4400M - 3600M)/63M)-12.857M)))); 

     Console.WriteLine(a); 
     Console.WriteLine(b); 

    } 
} 

出力:

0.1401908 
0.0952130222222222222222222222 

Code on DotNetFiddle

+0

で計算されています。素晴らしい説明。ありがとうございました – Bilal

関連する問題