2013-04-10 9 views
0

나는 2 개의 부동 소수점 값을 비교해야하며, 소수점 2 자리까지의 차이를 반올림 할 수 없기 때문에 비교할 때마다 오류가 발생합니다. 그것을 값과 비교하십시오.플로팅 값의 반올림

예 : 고객이 지불 한 금액이 60.36이고 발행 된 법안이 30.24 인 경우 차이가 30.120001입니다. 나는 플로어 함수를 사용하여 십진수 두 자리를 반올림하여 시도해 보았습니다. floorf (diff * 100 + .5)/100; 하지만 작동하지 않습니다.

어떻게 10 진수를 반올림하고 금전 등록기를 설계 할 때 사용해야합니까 ??

+0

부동 소수점 값을 비교해서는 안됩니다. – squiguy

+0

틀린, 그는 금전적 가치를 위해 수레를 사용하지 않아야합니다. '=='를 사용하지 않으면 그것들을 비교하는 것이 좋습니다. – ThiefMaster

+1

다음은 이유입니다 (부동 소수점을 사용하지 마십시오). http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency –

답변

7

화폐 금액을 처리하기 위해 이진 부동 소수점을 사용하지 않아야합니다. 반올림과 부동 소수점의 부정확성과 관련하여 많은 문제가 있습니다. 예를 들어, 0.1을 정확하게 나타내려면 float으로 표시 할 수 없습니다.

대신 fixed-point arithmetic을 사용하십시오.

+0

그런 다음 어떻게 float 값에 대한 계산을 수행해야합니까? .01 또는 0.05와 같은가? – user2227862

+2

@ user2227862 정수 유형을 사용하여 센트 수를 저장합니다. –