2011-01-14 1 views
1

이 Math.Ceiling 표현식을 단순화 할 수 있습니까?.NET :이 Math.Ceiling 표현식을 단순화 할 수 있습니까?

decimal total 
decimal? quantity, multiplier 
int? days 

total = (decimal)Math.Ceiling((double)quantity.Value * (double)days.Value * (double)multiplier); 

EDIT이 코드는 Silverlight 코드이므로 모든 캐스트가 두 번 입력되었음을 잊어 버렸습니다.

+0

는 당신이 실제로 달성하기 위해 무엇을 노력하고있다? – abelenky

답변

11

왜 모든 것을 2 배로 변환 하시겠습니까?

total = decimal.Ceiling(quantity.Value * days.Value * multiplier.Value); 

(당신은 대신 Math.Ceiling(decimal)을 사용할 수 있습니다,하지만 난 당신이 decimal.Ceiling를 사용하는 경우가 decimal를 사용하고 있음을 명확하게 느낀다.)

, 두 배로 모든 변환이 연산을 수행 한 다음 변환 : 내가 사용하는 것이 10 진수로 돌아 가면 정보가 손실 될 가능성이 큽니다. 아주 소수의 IMO와 2 진 IMO 사이의 변환은 거의 없습니다.

+0

기술적으로는 그다지 똑같지는 않습니다. (더 높은 정밀도를가집니다.) – SLaks

+0

@SLaks : 예, 알고 있습니다.하지만 거의 확실하게 그가 원하는 것입니다. –

+0

항목 중 하나가 정수가 아닌 경우 결과가 가장 정확한 유형으로 변환됩니다. 그들 모두가 그렇다면 중요하지 않습니다. –

0

정보를 많이 제공하지는 않았지만 다음은 하나의 아이디어입니다.

Null 가능 유형 (?으로 끝나는 유형)을 사용하지만 실제로 null인지 확인하지는 않습니다. (생략 한 코드가있을 수 있습니다.) null이 아님을 알고 있으면 Nullable 유형을 사용하지 마십시오. 그러면 표현식에있는 모든 용어가 제거됩니다. 당신이 double 각 승수를 캐스팅하는 이유를 모르겠어요

total = (decimal)Math.Ceiling((double)quantity * (double)days * (double)multiplier); 

:

는로 표현을 변경합니다. double으로 전송하기 전에 모두 함께 사용하는 것이 좋습니다. 이것은 당신의 표정을 바꿀 것

(. 정밀도의 손실을주의 깊게 확인) :

total = (decimal)Math.Ceiling((double)(quantity * days * multiplier)); 

전반적으로, 그 날에 간단하게 보이는, 그냥 좋은해야한다.
(테스트 전용 확실히 말할 것이다!)

+1

그는 그들에게 어떤 값도 제공하지 않는다 ... 나에게 제안과 할당 사이에 몇 가지 코드가 있음을 제안한다.) 내 생각에 nullable 값 유형을 사용하는 이유가 있으며 OP가 잘 될 수도있다. 그 질문과 관련이없는 코드로 다른 곳에서 확인하십시오. –

0

방법에 대해 :

decimal total; 
decimal? quantity = null, multiplier = null; 
int? days = null; 

total = Math.Ceiling(quantity ?? 0 * days ?? 0 * multiplier ?? 0); 
+0

Math.Ceiling (십진법)이없는 곳에서 Silverlight를 사용하고 있다는 것을 잊어 버렸습니다. –

+0

또한이 줄을 올 때쯤에는 모든 값이 null이 아닌 것을 이미 알고 있습니다. 따라서 .Value에 대한 호출. –

+0

Silverlight는 확장 방법도 지원합니다.이 방법은 다른 방법으로 접근 할 수 있습니다. –