.NET 부동 소수점 산술 및 정밀도 문제
C#에서 i = 10 * 0.69;
문은 놀랍게도 예상한 6.8999999999999995
대신 6.9
이 됩니다. 이는 .NET 프레임워크 내 부동 소수점 숫자 표현 및 산술의 본질적인 한계에서 비롯됩니다.
0.69와 같은 십진수 값이 이진수로 완벽하게 표현될 수 있다는 오해가 있습니다. 그러나 부동 소수점 숫자(예: double
및 float
)는 이진법을 사용하며, 1/3이 유한한 소수 자릿수로 정확하게 표현될 수 없는 것처럼 많은 소수도 이진법으로 정확하게 표현될 수 없습니다. 컴파일러는 컴파일 중에 결과를 계산하고 상수로 저장하지만, 이 저장된 값은 실제 수학적 결과의 근사치입니다.
이러한 정밀도 문제를 해결하기 위한 여러 솔루션이 있습니다.
decimal
데이터 유형을 사용하세요. decimal
는 더 높은 정밀도를 제공하고 6.9
를 정확하게 나타낼 수 있습니다. 그러나 decimal
을 사용하면 double
또는 float
에 비해 성능이 약간 저하될 수 있습니다.Math.Round()
과 같은 함수 또는 NumberFormatInfo
을 사용한 문자열 형식을 사용하면 결과를 원하는 정밀도 수준으로 반올림할 수 있습니다.견고하고 정확한 숫자 코드를 작성하려면 부동 소수점 연산의 한계를 이해하는 것이 필수적입니다. 적절한 기술을 활용함으로써 개발자는 이러한 정밀도 제한의 영향을 최소화하고 안정적인 수학 연산을 보장할 수 있습니다.
위 내용은 C#에서 `i = 10 * 0.69;`가 6.9 대신 6.8999999999999995가 되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!