将一个小数点button添加到iOS计算器

我跟着一个教程来做一个iOS计算器,我现在想要添加一个小数位button。 这是我的代码

头文件:

#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 

这是我的实现文件

 #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; } 

我在另一个线程上看到有人build议使用这个方法:

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

但是,这似乎并没有为我工作。 它确实让我input一个小数点,但是当input第二个数字时,小数点将会丢失。 任何人都可以提出一个我可以实现的方法来实现我想要的吗?

提前欢呼!

我的快速思考:保持数字作为文字在屏幕上,增加额外的数字和/或小数点作为文字。 只有在执行操作的时候才将其转换为浮点数(我会使用double,btw)。 build议的方法应该工作得很好。

就像是:

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

一个快速的提示,而不是使用int selectedOperation;...以后在代码中

 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;