は、私はそれを行うだろうかについてです:ブラウザーに入力された
#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
を使用するためのボーナスポイント。
で何が起こっているかの説明:
我々は、本質的にビットシフトをやっているが、ベース10の代わりに、ベース2のときにユーザーの種類数(例:6)、我々「シフト」既存の番号小数点以下1桁(例: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(1 => 0.01)を乗算し、数字(0.61 = 0.6)、小数点以下1桁右にシフトします(0.6 => 0.06)。入力した数字の配列に数字がある限り、これを繰り返します。その配列が空の場合は、削除ボタンを無効にします。
NSDecimal
を使用することの提案は、非常に高い精度の数値を許可することです。
なぜdownvotes?これは大きな質問です! –