어떻게 캐스트 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
로를 decimal
A에 대한 주어진, 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;
위의 접근 방식은 오버플로 예외 처리를 방해하지 않고 그러한 일이 발생하면 가능한 최대 값 (내 경우)을 유지하려는 경우에 작동하지만 다른 많은 시나리오에서는 이것이 예상되는 동작이 아님을 알고 있습니다. 예외 처리가 필요할 수 있습니다.