2011-01-27 4 views
5

これは過去に数回尋ねられたことは知っていますが、私が試したことはすべて失敗しています。私はUILabelでカスタムテンキーパッドを持っています。私が '1'を押すと、UILabelは1を表示します。私が欲しい「4」ボタンが続くUILabel iphoneに小数点以下の桁を自動的に挿入する方法は?

  • で0.01:

    • 私は私が欲しい「1」ボタンを押すと:0.14 UILabel
    • に今ここに私が何をしようとしているのです
    • は、次に '6':1.46
    • などなど

    は今、キーボードとUILabelは素晴らしい取り組んでいます。私はちょうど今小数点を働かせる必要があります。どのサンプルコードも素晴らしいでしょう(そして私のアプリケーションに置くべき場所)。これまで私のコードを見たいかどうかを教えてください。かなり簡単。みんな、ありがとう!ここで

  • +2

    なぜdownvotes?これは大きな質問です! –

    答えて

    4

    は、私はそれを行うだろうかについてです:ブラウザーに入力された

    #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を使用することの提案は、非常に高い精度の数値を許可することです。

    +0

    申し訳ありませんが、すべての質問は申し訳ありませんが、私は最初のアプリケーションを作成しています。あなたのコードが何をしているのか簡単に説明できますか?私はあなたがそれを非常によくコメントしたことを知っていますが、私はまだこのコードを使用する方法がわかりません:) –

    +0

    @Alexは答えを編集し終えました:) –

    関連する問題