> 백엔드 개발 > C++ > C#에서 `i = 10 * 0.69;`가 6.9 대신 6.8999999999999995가 되는 이유는 무엇입니까?

C#에서 `i = 10 * 0.69;`가 6.9 대신 6.8999999999999995가 되는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-10 08:57:41
원래의
150명이 탐색했습니다.

Why Does `i = 10 * 0.69;` in C# Result in 6.8999999999999995 Instead of 6.9?

.NET 부동 소수점 산술 및 정밀도 문제

C#에서 i = 10 * 0.69; 문은 놀랍게도 예상한 6.8999999999999995 대신 6.9이 됩니다. 이는 .NET 프레임워크 내 부동 소수점 숫자 표현 및 산술의 본질적인 한계에서 비롯됩니다.

0.69와 같은 십진수 값이 이진수로 완벽하게 표현될 수 있다는 오해가 있습니다. 그러나 부동 소수점 숫자(예: doublefloat)는 이진법을 사용하며, 1/3이 유한한 소수 자릿수로 정확하게 표현될 수 없는 것처럼 많은 소수도 이진법으로 정확하게 표현될 수 없습니다. 컴파일러는 컴파일 중에 결과를 계산하고 상수로 저장하지만, 이 저장된 값은 실제 수학적 결과의 근사치입니다.

이러한 정밀도 문제를 해결하기 위한 여러 솔루션이 있습니다.

  • decimal 데이터 유형을 사용하세요. decimal는 더 높은 정밀도를 제공하고 6.9를 정확하게 나타낼 수 있습니다. 그러나 decimal을 사용하면 double 또는 float에 비해 성능이 약간 저하될 수 있습니다.
  • 반올림 구현: Math.Round()과 같은 함수 또는 NumberFormatInfo을 사용한 문자열 형식을 사용하면 결과를 원하는 정밀도 수준으로 반올림할 수 있습니다.
  • 값 조정: 잠재적인 반올림 오류를 보상하기 위해 입력 값을 약간 조정할 수 있습니다. 그러나 이 접근 방식은 복잡성을 더하고 새로운 부정확성을 초래할 수 있습니다.

견고하고 정확한 숫자 코드를 작성하려면 부동 소수점 연산의 한계를 이해하는 것이 필수적입니다. 적절한 기술을 활용함으로써 개발자는 이러한 정밀도 제한의 영향을 최소화하고 안정적인 수학 연산을 보장할 수 있습니다.

위 내용은 C#에서 `i = 10 * 0.69;`가 6.9 대신 6.8999999999999995가 되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿