2016-08-12 5 views
1

몇 가지 오류 이해하기가 어렵습니다. 나는 판매 세 계산기를 만들려고합니다. 하지만 10 진수로 10 진수를 곱할 수 없기 때문에 계속 연산 오류가 발생합니다.C# 연산자 '*'는 'double'및 'decimal'유형의 피연산자에 적용 할 수 없습니다

decimal decTax; 
decimal decTotal; 
string input; 
decimal decOrder; 
// Accept the order from the Console window 
Console.Write("Enter order in dollars: $"); 
input = Console.ReadLine(); 
Decimal.TryParse(input, out decOrder); 

// Calculate the sales tax 
decTax = (0.06D * (decOrder + decTax)); 
decTotal = (decOrder + decTax); 
// Write the results to the Console Window 
Console.WriteLine(); 
Console.WriteLine("The Total is " & decTotal.ToString("c")); 
Console.ReadLine(); 
+0

또한 내 코드가 왜 이렇게 형식화되었는지 알지 못합니다. 나는 그런 초짜 문제에 대해 사과한다. 그러나 헤이, 나는 배우기도한다. –

+0

my line : decTax = (0.06D * (decOrder + decTax)); "*"를 이중 또는 십진수로 사용할 수없는 연산 오류가 발생합니다. –

답변

1

DDecimal 사용 M에 대한 Double 의미 : 여기 내 calulate 버튼 내 코드입니다.

decTax = (0.06M * (decOrder + decTax)); 

자세한 내용은 documentation을 참조하십시오.

+0

감사합니다. 하지만 decTax가 할당되지 않았다는 에러 메시지가 나타납니다. –

+0

변수를 처음 선언하고 기본값을 지정해야합니다. 할당되지 않았기 때문에 '0.00' 또는'0'으로 채우십시오. – MethodMan

+0

... 사용하기 전에 변수를 초기화해야합니다. –

4

오류는 정확히 무엇입니까? 10 진수를 리터럴 0.06D로 곱할 수 없습니다. 암시 적으로 수행 할 수없는 이유는 decimaldouble으로 변환하면 정밀도가 떨어질 수 있기 때문입니다. 정밀도를 잃을 가능성이있는 경우 컴파일러는 자동 변환을 수행하지 않습니다. 그러나,

decTax = 0.06m * (decOrder + decTax)); 

참고 :

decTax = ((decimal)0.06 * (decOrder + decTax)); 

또는 당신은 당신의 문자가 소수 더블 아님을 나타 내기 위해 m 접미사를 사용할 수 있습니다

도 소수에 캐스팅보십시오 질문에 게시 한 코드에서 초기 값을 decTax으로 지정하지 않았습니다. 따라서 decOrder + decTax을 계산할 수 없습니다. 이 경우에 decTax이 무엇을 의도했는지에 대한 질문은 명확하지 않지만 초기 값이 필요합니다.

관련 문제