부동 소수점 추가에 대한 질문
-
19-09-2019 - |
문제
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 ;)
제휴하지 않습니다 StackOverflow