는 여기에 내가 그것을 할 것입니다 방법에 관하여 :
#define NUMBER_OF_DECIMAL_PLACES 2
NSMutableArray *typedNumbers = ...; //this should be an ivar
double displayedNumber = 0.0f; //this should also be an ivar
//when the user types a number...
int typedNumber = ...; //the number typed by the user
[typedNumbers addObject:[NSNumber numberWithInt:typedNumber]];
displayedNumber *= 10.0f;
displayedNumber += (typedNumber * 1e-NUMBER_OF_DECIMAL_PLACES);
//show "displayedNumber" in your label with an NSNumberFormatter
//when the user hits the delete button:
int numberToDelete = [[typedNumbers lastObject] intValue];
[typedNumbers removeLastObject];
displayedNumber -= (numberToDelete * 1e-NUMBER_OF_DECIMAL_PLACES);
displayedNumber /= 10.0f;
//show "displayedNumber" in your label with an NSNumberFormatter
브라우저에 입력. 주의 사항 구현 자.
double
대신
NSDecimal
을 사용하는 보너스 포인트.
무슨 일이 일어나고 있는지의
설명 :
우리는 기본적으로 비트 이동을하고있는
, 대신 기본 2의베이스 (10)의 사용자 유형은 숫자 (예 : 6), 우리는 "변화"기존의 수 소수점 하나 (예 : 0.000 => 00.00)를 입력하고 입력 된 숫자에 0.01을 곱한 다음 (6 => 0.06) 기존 숫자 (00.00 => 00.06)에 추가하십시오. 사용자가 다른 번호 (예 : 1)를 입력 할 때도 마찬가지입니다. 왼쪽으로 시프트 (00.06 => 00.60), 입력 한 숫자에 0.01을 곱해서 (1 => 0.01), (00.60 => 00.61)을 더하십시오. 번호를 저장하는 목적이 NSMutableArray
이면 간단히 삭제를 쉽게 할 수 있습니다. 그러나 필요하지는 않습니다. 단지 편리함.
삭제 버튼이있는 경우 사용자가 마지막으로 입력 한 번호 (예 : 1)를 0.01을 곱한 다음 (0.01 = 1) 0.01에서 빼십시오 (0.61 = 0.6), 소수점 이하 1 자리수로 이동합니다 (0.6 => 0.06). 입력 한 숫자 배열에 숫자가있는 한이를 반복하십시오. 어레이가 비어있을 때 삭제 버튼을 비활성화하십시오.
NSDecimal
을 사용하기위한 제안은 단순히 매우 높은 정밀도의 숫자를 허용하는 것입니다.
왜 downvotes? 이것은 큰 질문입니다! –