2009-05-27 5 views
3

2 개의 매개 변수를 허용하는 나누기 방법을 쓰려고합니다.10 진수 값 0을 확인하십시오.

public static decimal Divide(decimal divisor, decimal dividend) 
{ 
    return dividend/divisor; 
} 

이제 제수가 0이면 제로 오류로 나눌 수 없습니다. 괜찮습니다.

제가하고 싶은 것은 제수가 0인지 확인한 후 1로 변환하는 것입니다. 제 방법에서 if 문을 많이 사용하여이 작업을 수행 할 수 있습니까? 나는 많은 if() s가 혼란을 일으킬 것이라고 생각한다. 나는 수학적으로 이것이 이루어져서는 안된다는 것을 안다. 그러나 나는 이것을위한 다른 기능을 가지고있다. 예를 들어

는 :

if(divisor == 0) 
{ 
    divisor = 1; 
} 
return dividend/divisor; 

는이 if() 문없이 할 수 있습니까?

+1

나는 이것이 문제의 도메인이라고 생각하지만 제수가 0.000001에서 0.0 –

+0

으로 아주 작은 변경을하면 조건부 if 문보다 코드가 더 좋은 결과를 반환한다고 생각해보십시오. 읽기가 훨씬 쉬워요 !! 그리고 그게 내가 원하는거야 –

답변

15

다음과 같은 조건부 if 문을 사용할 수 있습니다. 이것은 VB.net의 IIF와 동일합니다.

return dividend/((divisor == 0) ? 1 : divisor); 

()를 사용하여 후반부를 마무리해야합니다. 그렇지 않으면 나누기 오류가 발생합니다. 당신은 당신의 자신의 유형을 작성하고 당신이 정말로 원하는 경우, 원하는 동작을 얻기 위해/연산자를 오버로드 할 수있는 ?: 운영자

return (divisor == 0) ? dividend : dividend/divisor 
+0

두 세트의 괄호가 필요하지 않니? return dividend/(제수 == 0? 1 : 제수); 트릭을해야한다 –

+0

아니, 나는 이것도 같이 할 수있는 추가 세트가있다 : return dividend/(divisor == 0? 1 : divisor); – CodeLikeBeaker

+0

하지만 결과의 값을 감싸는() 포장이 필요합니다. 다른 현명한 경우에도 여전히 0으로 나누기 오류가 발생합니다. – CodeLikeBeaker

2

이것은 if 문과 거의 동일하지만 더 깨끗합니다.

return dividend/divisor == 0 ? 1 : divisor; 
+0

이것은 If 문보다 깨끗하지 않다. –

11

. 변환 또는 유형 변환을 피하기 위해 암시 적 변환 연산자를 구현하십시오.

그러나 런타임 오버 헤드가 추가되므로 좋은 생각이 아닐 수 있습니다. (틀림없이) 조금 더 깨끗해 보이는 코드를 얻을 수있는 유일한 이점이 있습니다.

+2

+1은 1로 나누는 것이 불필요하다는 것을 지적하고 단지 divident 만 반환합니다. –

+0

좋은 점도 있지만 추가 확장 목적으로 다른 것을 좋아합니다. 나는 너의 도움을 위해 +1을 준다. –