2017-11-13 5 views
1

Visual C++에서 Excel 수식을 변환하려고하지만 Visual Studio에서 다른 결과를 반환합니다.동일한 Excel 수식이 Visual Studio에서 다른 결과를 반환 함 C#

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

Excel에서 사용이 반환 :이 공식은 (I 하드 엑셀 디버깅 비주얼 스튜디오에서 모두 값이 변수를 부호화 한)

0.095213022 

및 비주얼 스튜디오에서 반환 :

0.14019079999999995 

아이디어가 있으십니까?

+0

은 멀리 당신 말이 맞아! –

+0

예, 특별히 부동 소수점 값이있는 데이터 유형을 언급해야합니다. 내 변수는 double이었고 소수점 – Bilal

답변

4

문제는 정밀도의 손실입니다.

C#에서는 숫자 리터럴을 쓸 때 컴파일러에서 표현식을 int으로 표시한다고 가정하고 수식에 리터럴을 사용하면 정밀도가 떨어질 수 있습니다. 정확도를 잃어버린 값으로 나누거나 나누면 결과가 WAYYY가 될 수 있습니다.

문제를 방지하려면 모든 숫자 리터럴을 부동 소수점 유형으로 선언하십시오. 이 예에서는 접미어 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