iPhone计算器教程帮助,十进制风格..再次

时间:2012-04-29 02:16:14

标签: objective-c ios xcode math xcode4.2

我正在研究iPhone计算器教程,我遇到了显示数字的问题。

计算器屏幕“打印”第二个输入操作数(数字)紧挨着第一个输入操作数(数字)导致一些错误的计算,因为currentNumber输出该字符串。

如何才能显示所有数字甚至运算符(+, - ,*,/)并仍能正确执行计算?

- (IBAction)pressedDecimal:(id)sender {
    calculatorScreen.text = [calculatorScreen.text stringByAppendingString:@"."];
}
- (IBAction)pressedDigit:(id)sender  {
    calculatorScreen.text = [calculatorScreen.text stringByAppendingFormat:@"%d", [sender tag]];
    currentNumber = [calculatorScreen.text floatValue];
}
- (IBAction) pressedOperation: (id) sender {
    if (currentOperation == 0) result = currentNumber;
    else {
        switch (currentOperation) {
            case 1:
                result = result + currentNumber;
                break;
            case 2:
                result = result - currentNumber;
                break;
            case 3:
                result = result * currentNumber;
                break;
            case 4:
                result = result / currentNumber;
                break;
            case 5:
                currentOperation = 0;
                break;
        }
    }
    currentNumber = 0;
    calculatorScreen.text = [NSString stringWithFormat:@"%g", result];
    if ([sender tag] == 0) result = 0;
    currentOperation = [sender tag];
}

好的,这是一个完全输入的字符串1.11 + 2.22 - 请注意它将它们放在一起..

Screenshot of fully entered string 1.11+2.22

这是完成的计算,这是错误的..如果字符串显示运算符 - 是小数问题我应该使用NSRange吗?

screenshot two of finished calculation

1 个答案:

答案 0 :(得分:1)

按下相应按钮后,您将尝试执行每个算术运算。如果你考虑一下,你会发现这不可能是正确的:例如,如果用户试图做12 + 34,所有计算器都知道何时按下“+”是它需要添加某事到12。

现在,如果您正在使用构建计算器教程,那么几乎可以肯定无论是谁编写它都有解决方案,您应该遵循这一点,因为如果您尝试以不同的方式执行它,那么它将会令人困惑。但这就是我要做的。有一个简单的版本和一个更复杂的版本。

这是简单的版本。

仅记住一个当前正在显示的数字是不够的。假设你到目前为止已经按下了:1 2 + 3。计算器需要知道(1)你输入了数字12,(2)你要求它添加到某个东西,以及(3)你输入的是另一个数字,到目前为止已经达到{{1 }}。 (它可能变成345或者什么。)

因此,计算器的状态包括以下三件事。 (1)按下操作键或“=”时显示的最后一个完整值。 (或者如果您最近按下清除按钮,则为0。)(2)按数字按钮,当前正在构建的值。 (3)按下最后一个操作键。 (或者如果您按下“=”或清除按钮,则“无操作”。)

所有这一切的重点在于,这正是计算器为了完成您所要求的而需要的信息。我不会详细介绍,因为当你按下每个可能的钥匙时,你可以找出状态如何变化,这对你的灵魂是有好处的。

如果你做了这一切,你会发现有些情况下计算器可能没有做你想要的,即使代码中没有错误。假设你输入12 + 34 * 56。在算术书籍,计算机软件和更昂贵的计算器中,这意味着12 +(34 * 56)而不是(12 + 34)* 56,因为乘法具有比加法更“优先”。以我上面描述的方式实现的计算器将以另一种方式执行并计算(12 + 34)* 56。如果这让你感到困扰,你可以让计算器“正确地”做到 - 但它会更加复杂,至少我暂时强烈建议你不要打扰。