Dưới đây là về làm thế nào tôi sẽ làm điều đó:
#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
Typed trong trình duyệt. Caveat Implementor. Điểm thưởng để sử dụng NSDecimal
thay vì số double
.
Giải thích về những gì đang xảy ra:
Chúng tôi đang chủ yếu làm chút chuyển dịch, nhưng trong cơ sở 10 thay vì cơ sở 2. Khi người dùng gõ một số (ví dụ: 6), chúng tôi "thay đổi" số lượng hiện có còn lại một chữ số thập phân (ví dụ: 0,000 => 00,00), nhân số được đánh số bằng 0,01 (6 => 0,06) và thêm số đó vào số hiện có của chúng tôi (00.00 => 00.06). Khi người dùng nhập vào một số khác (ví dụ: 1), chúng tôi cũng làm như vậy. Di chuyển sang trái (00.06 => 00.60), nhân số đã nhập với 0,01 (1 => 0,01) và thêm (00,60 => 00,61). Mục đích của việc lưu trữ số này là NSMutableArray
đơn giản chỉ là một tiện ích để xóa dễ dàng hơn. Nó không cần thiết, tuy nhiên. Chỉ cần một sự tiện lợi.
Khi người dùng nhấn nút xóa (nếu có), chúng tôi nhập số cuối cùng (ví dụ: 1), nhân 0,01 (1 => 0,01), trừ số của chúng tôi (0,61 => 0,6), và sau đó thay đổi số của chúng tôi đúng một chữ số thập phân (0,6 => 0,06). Lặp lại điều này miễn là bạn đã có số trong dãy số đã nhập của mình. Vô hiệu hóa nút xóa khi mảng đó trống.
Đề xuất sử dụng NSDecimal
chỉ đơn giản là cho phép các số có độ chính xác rất cao.
Nguồn
2011-01-27 19:49:06
Tại sao lại là downvotes? Đây là một câu hỏi hay! –