2012-04-29 14 views
1

私はiPhoneの電卓のチュートリアルに取り組んでいます。数字の表示に問題があります。iPhoneの電卓のチュートリアルのヘルプ、小数点のスタイル..元

2番目に入力されたオペランド(番号)が最初のオペランド(数値)を「印刷」すると、誤った計算が行われます。currentNumberはこの文字列を送ります。

演算子(+、 - 、*、/)をすべて表示しても計算を正しく実行するにはどうすればよいですか?ここで

Screenshot of fully entered string 1.11+2.22

がしたいwrong..idされ、完成計算、..ですそのはすべて一緒にそれを置くことに気づく -

- (IBAction)pressedDecimal:(id)sender { 
    calculatorScreen.text = [calculatorScreen.text stringByAppendingString:@"."]; 
} 
- (IBAction)pressedDigit:(id)sender { 
    calculatorScreen.text = [calculatorScreen.text stringByAppendingFormat:@"%d", [sender tag]]; 
    currentNumber = [calculatorScreen.text floatValue]; 
} 
- (IBAction) pressedOperation: (id) sender { 
    if (currentOperation == 0) result = currentNumber; 
    else { 
     switch (currentOperation) { 
      case 1: 
       result = result + currentNumber; 
       break; 
      case 2: 
       result = result - currentNumber; 
       break; 
      case 3: 
       result = result * currentNumber; 
       break; 
      case 4: 
       result = result/currentNumber; 
       break; 
      case 5: 
       currentOperation = 0; 
       break; 
     } 
    } 
    currentNumber = 0; 
    calculatorScreen.text = [NSString stringWithFormat:@"%g", result]; 
    if ([sender tag] == 0) result = 0; 
    currentOperation = [sender tag]; 
} 

OKは、ここで完全に入力された文字列1.11 + 2.22でありますNSRangeを使用しているはずの小数点問題ですか?

screenshot two of finished calculation

+0

エラーの計算を表示する画面のスナップショット(cmd + shift + 4)を共有できますか。私がこの行で 'calculatorScreen 'と言う疑問を持っていても、' pressdigit: 'メソッドからのurコード行 ' currentNumber = [calculatorScreen.text floatValue]; 'は' currentNumber = [[calculatorScreen text] floatValue]; ' –

+0

テキスト= [calculatorScreen.text stringByAppendingString:@ "。"]; ' –

答えて

1

あなたは、すぐに対応するボタンが押されている各演算を行うにしようとしています。あなたがそれについて考えるなら、これは正しいとは言えません:ユーザが12 + 34をやろうとすると、例えば "+"が押された時に電卓が知っていることは、何かを追加する必要があるということです。から12.

ビルド・ア・電卓のチュートリアルで作業している人なら、誰でもそれを書いた人はこれを解決することができます。それに従うべきです。方法はそれほど混乱しません。しかしここに私がすることがあります。簡単なバージョンとはるかに複雑なバージョンがあります。

ここでは簡単なバージョンです。

現在表示されている番号を覚えておくだけでは不十分です。あなたが今までに押されたとします:1 2 + 3。計算機は、あなたが数字12を入力したこと、(2)あなたが何かにそれを追加するように頼んだこと、そして(3)あなたが別の番号を入力していて、今まで3まで持っていることを知る必要があります。 (それは345などに変わるかもしれません)

したがって、電卓の状態は次の3つから構成されています。 (1)操作キーまたは「=」を押したときに最後に表示された完全な値。 (最近クリアボタンを押した場合は0になります)(2)現在ナンバーボタンを押して設定している値です。 (3)最後に押された操作キー。 (または「=」またはそれらのいずれかのボタンより最近にクリアボタンを押した場合は「操作なし」)

これはまさに計算機が必要とする情報であり、それを聞いた。それぞれの可能なキーを押したときにその状態がどのように変化するかは、あなたの魂にとって良いものになるため、詳細には触れません。

これをすべて実行すると、コードにバグがなくても電卓が望んでいないような状況があることがわかります。 12 + 34 * 56と入力したとします。算術図書、コンピュータソフトウェア、およびより高価な電卓では、乗算が加算よりも「優先度が高い」ため、これは(12 + 34)* 56ではなく、12+(34 * 56)を意味します。上記の方法で実装された計算機は、それを他の方法で行い、(12 + 34)* 56を計算します。それが気になるなら、あなたはそれを「適切に」することができます - しかし、はるかに複雑になります、そして、私は強くお勧めします。

+0

優れています...私はそこに行くときにもっと仕事をするために私の道に行きます。 – theProject

+0

私は家に帰ったときにこれを読むチャンスを得ました。いつものように私はあなたのドライブを教えていただき、単にその質問をユーモアにしていただきありがとうございます。分子と分母、オペランド1,2などを分ける電卓のコードを書いたので、私はこれと同じ考えを持っていました。このチュートリアルは特定の「Geeky Lemon」からのものでした。ネット上のこのコードは小数点を使用するようには設計されておらず、むしろ短い甘いデモンストレーションになると信じています。私は今夜​​、私が学んだことを適用して新鮮なものを書くように計画しています。オペランドの宣言、2など、オペレーション用の文字を表示することから始めます。 – theProject

+0

など、フォーラムに別の質問を追加します(私はそれを知っていて実際にはわかりません)。全く?私はこれをどうやってやったのかを最終的に知ってもらいたいと思っています。 – theProject