2012-11-21 3 views
2

십진수를 double로 변환 할 때 일부 예기치 않은 잘림이 때때로 있습니다. 예를 들어 :십진수를 이중으로 변환 할 때 예기치 않은 자르기

 decimal dec = -96.31614743511301m; 
     double dbl = Convert.ToDouble(dec); // dbl = -96.316147435113, why? 

가 예상대로 작동 다른 값 : 실제로 작동 두 번째 예는하지 않는 첫 번째보다 더 많은 소수 자릿수을 가지고

 decimal dec2 = -96.269592225955307m; 
     double dbl2 = Convert.ToDouble(dec2); // dbl2 = -96.269592225955307, expected 

참고.

 dbl = Convert.ToDouble(dec.ToString()); // dbl = -96.31614743511301, expected 

은 왜 이중 값이 첫 번째 예에서 잘립니다 : 또한, 첫 번째 값은 두 번 사용하여이 복잡한 코드로 성공적으로 변환 할 수 있습니까?

답변

3

진수 더블 상이한 정밀도가 다르게 저장되는 여기 ... 볼 - Difference between decimal, float and double in .NET?

+0

스토리지 제외 사항, 그 모두 이중 진수 값 -96.31614743511301를 저장할 수있는 경우, 다음 변환 하나에서 보인다 other는 값을 잘라 내지 않고 작동해야합니다. 왜 잘리지 않고 작동합니까? double dbl = Convert.ToDouble ("- 96.31614743511301"); 그러나이 결과는 잘림이 발생합니다 ... decimal dec = -96.31614743511301m; double dbl = Convert.ToDouble (dec); –

+1

이것은 버그처럼 보입니다 ... http://stackoverflow.com/questions/1584314/conversion-of-a-decimal-to-double-number-in-c-sharp-results-in-a-difference? rq = 1 –

관련 문제