어떻게 캐스트 a를 수행 double에 decimal통화 개발을 할 때 어떤 사용된다. 어디로 M갑니까?
decimal dtot = (decimal)(doubleTotal);
답변:
M캐스트 할 때는 숫자 리터럴 에만 사용합니다 .
decimal dtot = (decimal)doubleTotal;
부동 소수점 숫자는 정확한 값을 유지하는 데 적합하지 않으므로 먼저 숫자를 더한 다음로 변환 Decimal하면 반올림 오류가 발생할 수 있습니다. 숫자를 Decimal더하기 전에 숫자를로 변환 하거나 처음에 숫자가 부동 소수점 숫자가 아닌지 확인할 수 있습니다.
기본 변환 클래스 사용 : Convert.ToDecimal(Double)
Convert.ToDecimal(the double you are trying to convert);
double로를 decimalA에 대한 주어진, double어떤 경우에는 (1000000.0 / 3.0)와 같은 값 한 것 333333.333333333D를 산출하는 "초과"정밀도를 자르고 싶지만 다른 경우에는 333333.333333333313931D를 산출하여 유지하고 싶을 것입니다. 단순히 "10 진수로 변환"이라고 말하는 것이 아니라 코드에서 변환 수행 방법을 지정해야합니다.
Convert.ToDecimal(double)과 동일한 (decimal)doubleTotal경우를 제외하고, doubleTotal다른 유형으로 변경 당신은 아마 컴파일 타임 오류가 발생하지 않도록하고 있기 때문에 더 열심히 - 투 - 찾기 런타임 오류를 소개하는 것 다른 ToDecimal 재정의가 호출 될 수 있습니다. 캐스트 연산자가 훨씬 더 명시 적입니다 ...
음 이것은 오래된 질문이며 실제로 여기에 표시된 답변 중 일부를 사용했습니다. 그럼에도 불구하고 내 특정 시나리오에서는 double변환하려는 값 decimal이 decimal.MaxValue. 그래서 예외를 처리하는 대신이 확장 메서드를 작성했습니다.
public static decimal ToDecimal(this double @double) =>
@double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;
위의 접근 방식은 오버플로 예외 처리를 방해하지 않고 그러한 일이 발생하면 가능한 최대 값 (내 경우)을 유지하려는 경우에 작동하지만 다른 많은 시나리오에서는 이것이 예상되는 동작이 아님을 알고 있습니다. 예외 처리가 필요할 수 있습니다.