내 이중 숫자가 나머지없이 0.05로 나눌 수 있는지 확인해야합니다. 그래서 나는이 일을 해요 :double이 나머지가없이 나눌 수 있는지 확인하십시오.
if (!double.TryParse(ProductPriceTextBox.Text, out price) || !(0 < price) || !(price%0.05==0.0))
문제는 내 ProductPrice 동전에 0.05, 0.1, 0.2, 0.5, 1, 2 유로에서 구성 할 수 있다는 것입니다.
그래서 모든 제품 가격이어야합니다price%0.05==0
를, 즉 :
1유로, 1.5 유로, 0.5 유로 - 1.21 유로, 0.01 유로를 통과 - 실패합니다.
하지만 컴파일러는 나에 대한 프롬프트 항등 연산자와 부동 소수점 숫자의
(price%0.05==0.0)
비교. 실패 이유
prescision
손실 가능성 내가이 작업을 수행 할 수 있습니다 물론... 알아낼 수 없습니다 :
int priceInCents= price*100;
(priceInCents%5==0)
그러나 나는 다른 방법이 있다고 생각합니다.
부동 소수점 값은 본질적으로 부정확 ..... 그렇게 처리하는 것이 훨씬 쉽다. 반올림 오류가 발생합니다. * [모든 컴퓨터 과학자 이 부동 소수점 연산에 대해 알아야 할 사항] (https://www.ccl.ac.uk/teaching/1011/FPComp/floatingmath.pdf) * – Richard
이 종류의 계산 '==')는 double이나 float을 사용하지 말고 십진수를 사용해야합니다 !! (또는 아마도 엡실론 조건) – TaW
그래서 내가 – Cheese