2012-02-15 7 views
0

iOS電卓を作成するためのチュートリアルに続いて、小数点以下の桁のボタンを追加したいと考えています。iOS電卓に小数点ボタンを追加する

- (IBAction)Decimal:(id)sender 
{ 
NSString *currentText = calcScreen.text; 
if ([currentText rangeOfString:@"." options:NSBackwardsSearch].length == 0) { 
    calcScreen.text = [calcScreen.text stringByAppendingString:@"."]; 
} 

:ここに私のコードです

ヘッダファイル:私は誰かの方法を使用して示唆していたことを別のスレッドで見た

#import "CalcViewController.h" 

@implementation CalcViewController 

-(IBAction)numberPressed:(id)sender { 
selectedNumber = selectedNumber * 10 + (float) [sender tag]; 
calcScreen.text = [NSString stringWithFormat:@"%2g", selectedNumber]; 
} 

-(IBAction)operationPressed:(id)sender { 
if (selectedOperation == 0) { 
    result = selectedNumber; 

} else { 
    switch (selectedOperation) { 
     case 1: 
      result = result + selectedNumber; 
      break; 
     case 2: 
      result = result - selectedNumber; 
      break; 
     case 3: 
      result = result * selectedNumber; 
      break; 
     case 4: 
      result = result/selectedNumber; 
      break; 
     case 5: 
      selectedOperation = 0; 
      break; 



    } 
} 
selectedNumber = 0; 
calcScreen.text = [NSString stringWithFormat:@"%2g", result]; 
if ([sender tag] == 0) result = 0; 
selectedOperation = [sender tag]; 

} 


-(IBAction)clearNumber:(id)sender { 
selectedNumber = 0; 
calcScreen.text = @"0"; 
} 

-(IBAction)clearOperation:(id)sender { 
selectedNumber = 0; 
calcScreen.text = @"0"; 
selectedOperation = 0; 
} 

ここ

#import <UIKit/UIKit.h> 

@interface CalcViewController : UIViewController { 

float result; 
float selectedNumber; 

int selectedOperation; 

IBOutlet UILabel *calcScreen; 
} 

-(IBAction)numberPressed:(id)sender; 
-(IBAction)operationPressed:(id)sender; 
-(IBAction)clearNumber:(id)sender; 
-(IBAction)clearOperation:(id)sender; 

@end 

は私の実装ファイルでありますしかし、これは私にとってはうまくいかないようでした。実際に小数点を入力させることになりますが、2番目の数値を入力すると小数点が失われます。誰も私がしようとしているものを達成するために実装することができる方法を提案することはできますか?

事前に乾杯!

+0

この質問にはどのような解決策が見つかりましたか? – lakesh

答えて

0

私の考えは簡単です:数字を画面上にテキストとして保存し、数字や小数点をテキストとして追加します。操作が実行される瞬間にのみ、それをfloatに変換します(私はdouble myself、btwを使用します)。提案された方法は正常に動作するはずです。

ような何か:代わりに int selectedOperation;...を使用しての

-(IBAction)numberPressed:(id)sender { 
    calcScreen.text = [calcScreen.text stringByAppendingString:[sender tag]]; 
} 

-(IBAction)operationPressed:(id)sender { 
    selectedNumber = [calcScreen.text floatValue]; 
    ... 
} 
+0

あなたが何を意味しているかを示すコードを書き上げる可能性はありますか? – George

+0

コード例を追加しました。私はそれをテストしていないので、おそらく完全に正しいとは限りません。 – fishinear

+0

ありがとうございますが、残念ながら、アプリがクラッシュする原因となっているエラーが発生しています。行 calcScreen.text = [calcScreen.text stringByAppendingString:[送信者タグ]]; エラーを送信しています: 'NSString *'型のパラメータに 'NSInteger'(別名int)を送信する互換性のない整数へのポインタ どのような考えですか? – George

0

一つの簡単なヒント、以降のコードでは、

switch (selectedOperation) { 
    case 1: 
     result = result + selectedNumber; 
     break; 
    case 2: 
     result = result - selectedNumber; 
    ... 

typedef enum

typedef enum { 
    OperationTypeAdd = 0, 
    OperationTypeSub, 
    ... 
    } OperationType 

switchブロックに使用してみてください

switch (operationType) { 
    case OperationTypeAdd: 
     result = result + selectedNumber; 
     break; 
    case operationTypeSub: 
     result = result - selectedNumber; 
     break; 
+0

typedef列挙型はどこで宣言しますか? – George

+0

ヘッダーファイルに列挙型を宣言します。あなたのケースでは、 '@interface CalcViewController'の前に' CalcViewController.h'があり、 'int selectedOperation;ではなく' OperationType selectedOperation 'と書かれています。列挙型[ここ](http://stackoverflow.com/questions/707512/what-is-a-typedef-enum-in-objective-c)に関する記事を読んでください。私は文字列に整数を変換する問題があるのを読んで、 '[NSString stringWithFormat:@"%i "、intValue];' @George – pawelropa

関連する問題