2012-06-03 2 views
-4

몇 가지 이유 때문에 두 개의 정수로 정수 값과 분수 값이 필요합니다. 예를 들어iPhone/iOS에서 Objective C의 기본 수학

:

double aValue = 2.4f; 
int aInt = (int)aValue;  
int aFract = (int)((aValue - aInt) * 100.0f); 
이 쉽게 내가 지금 사용하고이 식을 통해 수행 할 수있는 수학의 내 기본 지식에 따르면, 정수 (12) 및 (34)

로 갈라 값 12.34

그것은 지금까지는 작동하지만 이상한 출력 동작을합니다.

예를 들어 2.30000을 전달하면 '2'와 '29'대신 '2'와 '29'가 표시됩니다.

aInt와 aFract를 Double로 선언하면 처리 결과가 '2.0000'과 '30 .0000 '으로 올바르게 표시되지만 '30 .0000'을 정수로 변환하면 '29'에서 다시 'interestingly'가됩니다.

+7

[당신이 부동 소수점에 대해 알아야 할 사항. (http://docs.oracle.com/cd/ E19957-01/806-3568/ncg_goldberg.html)이 질문은 수백 배 이상의 복제본. –

답변

-2

숫자가 잘못 표시되어 실행 중입니다. 잘라 내기 전에 0.125 정도를 추가하십시오.

+0

감사합니다. Ignacio. 이 접근법은 지금까지는 작동하지만 왜 0.30 * 100.0이 왜 부정확한지 이해하지 못하기 때문에 여전히 만족스럽지 않습니다. 13.6546846516513512651과 같은 숫자의 일부 반올림 오류는 예상됩니다. 그러나 "100"과 "0.3"의 곱셈은 아닙니다. – Tom

+0

@ 톰, 왜 안 되니? 그것들은 10 진수이고 컴퓨터는 2 진수로 작동합니다. –

+0

당신이 맞습니다. 어쩌면 나는 그런 계산을 위해 NSDecimal을 사용해야한다. 나는 컴퓨터가베이스 2에서 작동한다는 것을 알고 있지만 Float과 Double이 기본 10/2 문제를 이미 처리했다고 가정하고 있습니다. 고마워. – Tom

1

당신은 루프가 다음 더 정확한 것 문자열로 변환 내부의 일부 (작은 수를 100 미만 정도) 및하지로 변환하려는 경우, 당신은 부정확성에 해당되지 않습니다

가이 같은 것

double aValue = 2.3; 
NSString *str = [NSString stringWithFormat:@"%f", aValue]; 
NSArray *arr = [str componentsSeparatedByString:@"."]; 

지금 편곡 2, 3 좋은 프로그래머가 게으른 프로그래머이며, 기억하시기 바랍니다 포함

+3

대신 '2999999999999'가 포함될 때까지는 재미 있고 게임입니다. –

+0

감사합니다. 오마르. 나는 이미이 해결책을 고려하고 있었다. 그것은 작동하지만 내 경우에는 맞지 않을 것입니다. 제 생각에는 IOS는 예상대로 수학을 수행해야합니다. 그리고 0.30 * 100.0은 30.0이고 다른 것은 없습니다. – Tom

+2

하지만 0.30 [정확히 2 진수로 표현할 수 없음] (http://www.wolframalpha.com/input/?i=0.3+in+binary). 그 번호의 컴퓨터 매장을 어떻게 제안합니까? –