2013-05-10 2 views
-1

C#에서 Decimal을 Double로 변환하는 동안 문제가 발생했습니다. 0.3 대신 0.2999999999999Visual Studio 2010 C# Double

약간 디버깅 할 때 변환이 문제가되지 않습니다.

인쇄 화면과 감시 목록을 참조하십시오. http://i.imgur.com/rTUDfxo.png

누구나 알고 계십니까?

편집 : 답변 : Visual Studio 2010의 이상한 동작입니다. 모든 작업을 다시 시작한 후에 문제가 없습니다.

+1

부동 소수점 값은 –

+2

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg. html –

+1

그대로,이 질문에 답할 수 없습니다. 0.2999999999999는 유효한 Double 값 0.3과 같습니다. 문맥이 없으면 아무도보고있는 가치가 왜 틀린 지 말할 수 없습니다. –

답변

2

0.3은 2 진수로 저장 될 때 무한대 표현을 갖습니다. (0.) 00111111 11010011 00110011 00110011 00110011 00110011 00110011 00110011 ..... 32,64 또는 128 비트로 저장하더라도 아무런 문제가 없습니다.

다시 이중으로 변환하면 정확도가 떨어집니다. 그래서 당신은 0.2999999999를 얻고 있습니다 ...

이것은 버그가 아니며 무한한 정확성을 저장하는 것은 간단합니다.

+0

Visual Studio 2010의 이상한 동작이었습니다. 모든 것을 다시 시작한 후에 문제가 없습니다. –

+1

이 표준에 유의하십시오. http://en.wikipedia.org/wiki/IEEE_floating_point IEEE-754 –

1

floating binary type이므로이 동작은 두 가지 경우에 공통입니다. 두 가지 유형과 같은 메모리의 값이 완전히 다른 저장 : 플로트에

컴퓨터이

10001.10010110011 

같은 다수 그러나 소수에서는,이

같이 저장된 저장
12345.65789 

숫자에 약간의 차이가 발생할 수 있습니다 (예 :

). 플로트에

:

0.1 = 0.09999 

소수점

0.l = 0.1