objective-c - iPhone 计算器教程帮助,十进制样式..再次

标签 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

最佳答案

您正在尝试在按下相应按钮后立即执行每个算术运算。如果您考虑一下,您会发现这不可能是正确的:例如,如果用户尝试计算 12+34,计算器只知道何时按下“+”是它需要添加 一些到12。

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

这是简单的版本。

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

因此,计算器的状态由以下三项组成。 (1) 按下操作键或“=”时显示的最后一个完整值。 (或者,如果您比那些按钮更晚按下清除按钮,则为 0。) (2) 当前通过按下数字按钮构建的值。 (3) 最后按下的操作键。 (或者,如果您最近按了“=”或清除按钮,则为“无操作”。)

所有这一切的要点是,这正是计算器执行您要求的操作所需的信息。我不会详细介绍,因为了解当您按下每个可能的键时状态如何变化对您的灵魂有好处。

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

关于objective-c - iPhone 计算器教程帮助,十进制样式..再次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369173/

相关文章:

ios - 如何向 XCUITest 添加标签/属性(Swift)

iphone - 不显示阿拉伯语键盘

iphone - pngcrush 捕获 libping 错误,但仅限于为设备构建时

ios - 如何在 Swift (Xcode) 上通过代码显示屏幕?

ios - 如何立即结束声音?

objective-c - UIImagePNGRepresentation 内存泄漏

ios - 自适应 UICollectionView 单元格宽度

xcode - XCode 中的代码签名错误 - 是否与 Apple 开发者网站关闭有关

ios - 使用 renderInContext : for masks created by cgpaths

ios - if else case 头文件不执行