在计算器中使用NSNumbers进行计算?

我试图使用NSNumbers进行计算,并跟踪用户input的数字。

问题是,我的应用程序没有进行任何计算后更新我的代码追加。 每当用户按下点button时,十进制值就会被赋值。 可以find附加或计算器中的小数点function 。

我已经看到,跟踪来自用户的input并进行计算的正确方法是使用NSNumber,但由于我是Objective-c的新手,我一直在努力理解使用和实现它。

所以,希望有人能引导我find合适的解决scheme。

这是标题…

int Method; float SelectNumber; float RunningTotal; bool DecimalActived; @interface ViewController : UIViewController{ IBOutlet UILabel *Screen; } -(IBAction)Number9:(UIButton *)sender; -(IBAction)Dot:(UIButton *)sender; @end 

这是执行文件..

 -(IBAction)Number9:(UIButton *)sender{ [self appendDigit:@"9"]; } - (IBAction)Dot:(UIButton *)sender { NSString *currentText = Screen.text; if ([currentText rangeOfString:@"." options:NSBackwardsSearch].length == 0) { [self appendDigit:@"."]; } } - (void)appendDigit:(NSString *)digit { // handle two special cases: append to only zero means just replace // but append decimal point to zero is a regular append if ([self->Screen.text isEqualToString:@"0"] && ![digit isEqual:@"."]) { self->Screen.text = digit; } else { self->Screen.text = [Screen.text stringByAppendingString:digit]; } } - (IBAction)Percent:(UIButton *)sender { [self MySwitch]; Method = 5; SelectNumber = 0; DecimalActived = FALSE; Screen.text = [NSString stringWithFormat:@"%.2g", RunningTotal]; } - (IBAction)PositiveOrNegative:(UIButton *)sender { [self MySwitch]; Method = 6; SelectNumber = 0; DecimalActived = FALSE; Screen.text = [NSString stringWithFormat:@"%g", RunningTotal]; } -(IBAction)Equals:(UIButton *)sender{ [self MySwitch]; Method = 0; SelectNumber = 0; DecimalActived = FALSE; Screen.text = [NSString stringWithFormat:@"%g", RunningTotal]; } -(IBAction)AllClear:(UIButton *)sender{ Method = 0; RunningTotal = 0; SelectNumber = 0; Screen.text = [NSString stringWithFormat:@"0"]; } - (double) MySwitch { NSNumberFormatter SelectNumber = [[NSNumberFormatter alloc] init]; [SelectNumber setNumberStyle:NSNumberFormatterDecimalStyle]; NSNumber RunningTotal = [SelectNumber numberFromString:self->Screen.text]; if (RunningTotal == 0) { RunningTotal = SelectNumber; } else{ switch (Method) { case 1: RunningTotal = RunningTotal * SelectNumber; break; case 2: RunningTotal = RunningTotal / SelectNumber; break; case 3: RunningTotal = RunningTotal - SelectNumber; break; case 4: RunningTotal = RunningTotal + SelectNumber; break; case 5: RunningTotal = RunningTotal / 100; break; case 6: if(RunningTotal > 0){ RunningTotal = - RunningTotal; } else{ RunningTotal = + RunningTotal; } break; default: break; } } return RunningTotal; } 

如果你们有任何问题或需要更多的信息关于我的程序,请随时问,我会尽可能提供更多的信息或回答任何问题,你们可能.. 🙂

标题应该看起来更像这样:

 // this uses more conventional (lowercase) property names // and removes a couple that looked extraneous @interface ViewController : UIViewController @property(strong,nonatomic) IBOutlet UILabel *screen; @property(assign,nonatomic) NSInteger method; @property(strong,nonatomic) NSNumber *runningTotal; @end 

当用户按下数字,十进制,减号,附加到screen标签,因为你有它。 当用户按下操作button时,logging该操作的整数并loggingscreen标签的当前( NSNumber )值。 做一个计算…

 - (void)doComputation { float screenF = [[self screenValue] floatValue]; float runningF = [self.runningTotal floatValue]; float result; switch (self.method) { case 1: result = runningF * screenF; break; case 2: result = (screenF == 0.0)? 0.0 : runningF / screenF; break; case 3: result = runningF - screenF; break; case 4: result = runningF + screenF; break; default: break; } self.screen.text = [NSString stringWithFormat:@"%0.8f", result]; self.runningTotal = [NSNumber numberWithFloat:result]; } 

(屏幕值,因为你有…)

 - (NSNumber *)screenValue { NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; [f setNumberStyle:NSNumberFormatterDecimalStyle]; return [f numberFromString:self.screen.text]; } 

这个怎么用?

  NSNumberFormatter SelectNumber = [[NSNumberFormatter alloc] init]; [SelectNumber setNumberStyle:NSNumberFormatterDecimalStyle]; NSNumber RunningTotal = [SelectNumber numberFromString:self->Screen.text]; if (RunningTotal == 0) { RunningTotal = SelectNumber; } else{ switch (Method) { case 1: RunningTotal = RunningTotal * SelectNumber; break; 

这个代码甚至不应该工作。 SelectNumber是一个浮点数或它是一个NSNumberFormatter *