내가 뭘하려고 오전 매우 간단 아직 결과가 오류와 함께 제공 :목표 C 부동 소수점 곱셈 부정확성
float x = 423.36;
NSLog(@"%f", x);
NSLog(@"%.2f", x*17719);
결과 :
2012-11-12 11:19:02.096 test[2917:907] 423.359985
2012-11-12 11:19:02.098 test[2917:907] 7501515.50
- 첫 번째 질문 : 처음에 NSLog 소수 부분이 변경되고 있습니다. 어떻게 그대로 둘 수 있습니까?
- 두 번째 질문 : 십진수가 변경되면 곱셈 프로세스가 부정 확한 결과를 초래합니다.
계산기로 계산할 때 나는 7501515.84를 얻습니다. 이것이 내 앱에서 얻고 자하는 것입니다.
아이디어가 있으십니까? 미리 감사드립니다. Roy.
감사합니다! 그게 효과가 있었어! –
이것은 단지 문제를 지연시키는 것입니다.'x'를 double로 변환 한 후에'NSLog (@ "%. 100f", x)'를 시도하십시오. 소수점 이하 약 14 자리에서 같은 종류의 오류가 발생합니다. – Tim
@tim 어떤 점에서는 double이 너무 비싸지 만 주어진 예제의 경우 원시 타입 대신 NSDecimalNumber _class_를 사용하는 것은 'sledge-hammer를 사용하여 너트를 깨뜨리는 것'과 같습니다. –