0

好的。我的应用程序有一个文本字段,旁边是两个按钮(加号按钮和等号按钮)。当您按下“加号”按钮时,它会获取 textField 中的文本并为其添加一个“+”。下面的代码:

- (IBAction)plusButtonPressed:(id)sender {
    NSString *plusString = @"+";
    NSString *inputString = carbsField.text;
    NSString *outputString = [NSString stringWithFormat:@"%@%@",inputString,plusString];
    NSLog(@"%@",outputString);
    [carbsField setText:outputString];
}

我最终会让它变得更聪明,这样我就不能放两个加号或其他任何东西。无论如何,然后我希望等号按钮获取文本字段中的任何内容,它应该类似于:“23+54+2.2”并获得这些值的总和。我相信我知道如何获取一个整数并将其变成一个字符串,但我想验证它:

int value = 56;
NSString *string = @"%d",value;

好吧,如果有人能告诉我如何做到这一点,我将不胜感激。谢谢。

编辑 目前,我还没有尝试过任何东西。这是因为我不知道从哪里开始。我有一个想法,但我不知道如何执行它。我相信我需要在“+”将它们转换为之前获取所有字符int,然后获取这些值的一些数组的总和。

编辑 #2 我现在使用:

- (IBAction)equalButtonPressed:(id)sender {
    NSString *inputString = carbsField.text;
    NSArray *numbers = [inputString componentsSeparatedByString:@"+"];
    int sum = 0;
    for (NSString *number in numbers) {
        sum += [number intValue];
    }
    NSString *theSum = [NSString stringWithFormat:@"%d",sum];
    NSLog(@"%@",theSum);
}

但是,它根本不会记录任何内容。我做错什么了?

4

2 回答 2

4

这取决于这将变得多么复杂。如果您正在寻找实现更复杂的计算器,我建议您寻找可以为您执行此操作的评估器库。

但是,如果您只想在列表中添加一堆数字,您可以这样做:

NSString *input = @"1+2+3.5";
NSArray *numbers = [input componentsSeparatedByString:@"+"];
float sum = 0;
for (NSString *number in numbers) {
   sum += [number floatValue];
}
NSLog(@"Result: %f", sum); 

请注意,这是非常不灵活的代码,仅执行您描述的操作。

于 2012-10-11T21:31:39.877 回答
4

一个提示

NSExpression *expression = [NSExpression expressionWithFormat:@"23+54+2.2"];
id result = [expression expressionValueWithObject:nil context:nil]; //returns NSNumber object

NSLog(@"%@", result);

if ([result floatValue] ==  [nsnumberWithExpectedResult floatValue]) {
    //WARNING: comparing floats like this is highly dangerous, due to rounding errors 
    // while with ints it is ok
}
于 2012-10-11T21:42:14.957 回答