【发布时间】:2014-04-19 20:30:54
【问题描述】:
我正在尝试使用 NSNumbers 进行计算并跟踪用户输入的数字..
问题是我的应用程序在将我的代码更新为 append 后现在没有进行任何计算。用户按下点按钮时的十进制值。可以找到Append or Add the decimal point functionality in calculator。
我已经看到跟踪用户输入并进行计算的正确方法是使用 NSNumber,但由于我对 Objective-c 非常陌生,我一直在努力理解其使用和实现它。
所以,希望有人可以指导我找到合适的解决方案。
这是标题...
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;
}
如果你们对我的计划有任何疑问或需要更多信息,请随时提出,我会提供尽可能多的信息或回答你们可能有的任何问题.. :)
【问题讨论】:
-
这和
NSNumber有什么关系?你的代码都没有使用NSNumber。 -
对不起,我错过了在 MySwitch 函数上添加类型,我刚刚做了..
-
您遇到的具体问题是什么?这不是指导或交互式调试的地方。
-
在您的
NSNumber对象上使用doubleValue以获得double。然后您可以使用double进行数学运算。 -
是的,但是我如何获得用户已经输入的内容?示例 12 然后调用操作 + 然后再次调用 12.. 那么,我应该创建一个本地 NSString 变量来获取用户第一次输入的任何内容吗?
标签: ios objective-c cocoa-touch ios7 calculator