문제

float totalAmount = 0;
.
.
.//totalAmount assigned value 1.05 correctly
.
totalAmount  += float.Parse(dataRow["Amt"].ToString()); //where dataRow["Amt"] has value 4.93

TotalAmount에 대한 답변은 5.98 대신 5.97999954입니다.

왜 이런 일이 일어나고 있습니까?

도움이 되었습니까?

해결책

당신은 그것을 말합니다 totalAmount 축적 전에 1.05입니다. 그것은 예상 결과를 제공합니다.

1.05
4.93 +
------
5.98

5.9799954를 받고 있습니다. 기본적으로 IEEE 플로팅 포인트로 가장 잘 표현되는 답은 모든 소수점 숫자를 정확하게 표현할 수없는 이진 형식입니다. 예를 들어, 다소 일반적인 0.110 무한 이진 부동 소수점 표현이 있습니다 .0001100110011...2.

좋은 측정을 위해 Wikipedia 링크 : http://en.wikipedia.org/wiki/floating_point#accuracy_problems ;)

다른 팁

이것은 대표 때문입니다 베이스 -10 a 베이스 -2 체계.

컴퓨터의 부동 소수점 수학은 항상이 작업을 수행합니다. 필요한 정밀도를 알고 있다면 필요한 소수점 표현을 사용해야합니다.

jdmichal은 정확하지만, 실제로 이것을 올바르게 추가하기를 원한다면 10 진수 유형 (소수점 리터럴 포함)을 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top