2011-09-20 1 views
2

우리가 직관적으로 다른 부동 소수점 형식보다 기대하는 것처럼 일을 더 이상 가능성이 C#의 진수 유형에 대한 평등 비교인가?C# 진수 형식 평등

답변

5

는 나는 당신의 직관에 따라 달라집니다 것 같아요. 나는 어떤 사람들은 1을 3으로 나눈 결과를 1/3으로 나누고 다른 사람들은 "오, 1을 3으로 나누면 10 진수로 표현할 수 없다고 생각합니다. 유지할 자리수를 결정해야합니다. 0.333으로 가겠습니다. "

이전 방식으로 생각하면 Decimal은별로 도움이되지 않지만 후자의 방식으로 생각하고 필요할 때 반올림하는 것에 대해 명시하는 경우 "직관적으로"주체가 아닌 작업 10 진수로 반올림 오류로 예 : 10으로 나눠서 예상대로 행동 할 것입니다. 이것은 2의 거듭 제곱이 좋지만 10의 거듭 제곱은없는 이진 부동 소수점 유형의 동작보다 대부분의 사람들에게 직관적입니다.

+0

-1 이전 질문에 대한 답을 다시 쓰지 않는 경우를 제외하고는이 질문에 실제로 대답하지 않기 때문입니다. – Noldorin

+0

@ Noldorin - 이진 산술이 대부분 직관적이지 않다는 문제에 대한 답변이 없으므로이 질문에 다시 답을 달았습니다. 또한 평등 문제에 대해 "아니오"라고 대답하는 것에 동의하지 않습니다. 평등을 사용하는 것은 좋은 생각이지만, 예를 들어 되는 번호 유형에 따른 문제가 다양한 웹 사이트에 혼란 자바 스크립트 사용자의 양 –

+0

바이너리 그것은 ... 그것은 내가 MSDN에서 논의하고 인용하는, 단순히 내부 표현 방식 반올림이 수행의 직관적 인과 아무 상관 없습니다 . Meh. – Noldorin

4

기본적으로, 아니. Decimal 유형은 단순히베이스 10 시스템에 특별히 반올림 오류 을 줄이기 위해 설계되었습니다 부동 소수점 숫자의 전문 종류를 나타냅니다. 즉, Decimal의 내부 표현은 실제로 기본 이진이 아닌 기본 10 (denary)에 있습니다. 따라서, 이는 통화 계산을위한보다 적합한 유형입니다. 물론 이러한 애플리케이션에만 국한되지는 않습니다.

구조에 대한 MSDN page 가입일

:

진수 값 형 포지티브 79,228,162,514,264,337,593,543,950,335 부정적인 79,228,162,514,264,337,593,543,950,335 범위 진수를 나타낸다. 10 진수 값 형식은 많은 중요한 정수 및 소수 자릿수 및 반올림 오류가 필요하지 않은 재무 계산에 적합합니다. Decimal 형식은 반올림의 필요성을 제거하지 않습니다. 오히려 반올림으로 인한 오류를 최소화합니다. 예를 들어, 다음 코드는 결과가 0.99999999999999999999999999가 아닌 1을 생성합니다.

10 진수는 부호, 값의 각 숫자가 0에서 9까지의 숫자 값으로 구성된 부동 소수점 값입니다. 숫자 값의 정수 부분과 분수 부분을 구분하는 부동 소숫점의 위치를 ​​나타내는 배율 인수입니다.

+0

Ahem. 이유는 무엇입니까? 이 답변은 완벽하게 정확합니다. – Noldorin