2013-01-18 3 views
3

특정 변환에 흥미로운 문제가 있습니다. 문자열 "0,3" 또는 "0.3"UICulture에 따라 Double 값으로 변환하려고하면 결과는 0,29999999이됩니다. 아직 결과를 얻으려면 해결책을 찾지 못했습니다. 0,3.문자열을 double로 변환 C#

변환 후 동일한 값을 가질 수있는 방법이 있습니까?

+8

이것은 많은, 여러 번, 여러 번 요청되었습니다. 십진수 값이 이진 컴퓨터에 저장되는 방식 때문에 '0.3'은 이중 값으로 정확하게 표현할 수 없습니다. – mellamokb

+0

마크의 대답을 참조하십시오. 아마 주목할 것은 표현이 아닌 부동 소수점 표현이라고합니다. http://en.wikipedia.org/wiki/Floating_point – kenny

답변

14

double은 모든 값을으로 표시 할 수 없습니다. 그것은 정수를 표현하는 것을 보장하지만 그것은 그것에 관한 것입니다. 당신이 더 많은 숫자의 "인간"근사 식으로 뭔가를해야 할 경우, decimal를 사용

decimal val = decimal.Parse("0.3"); 

참고 : decimal또한 모든 값 나타내지 않습니다 -하지만 근사는 더 많은 사람들이 어떻게 같은 경향 않는 방법 숫자가 제대로 작동 할 것으로 기대하십시오. 특히 double은 통화와 같은 것에는 사실상 쓸모가 없습니다.

+1

조금 더 자세한 내용은 Jon Skeet [여기] (http://stackoverflow.com/a/618596/18192)에서 제공합니다. 링크 된 기사를 클릭하면 자세한 설명을 볼 수 있습니다. 짧은 대답은 '10 진수'가 기수 10이며 0.3과 일치한다는 것입니다. 'double'은베이스 2에 있고, 그렇지 않습니다. – Brian

관련 문제