2014-02-10 27 views
1

我工作的计算器应用程序与双打工作,然后当你按等于操作完成与双打,然后切换到NSNumberFormatter。我的问题是当用户想要在屏幕上添加(或 - ,/,*)一个数字到答案。如果屏幕上的号码没有逗号,一切正常,如果屏幕上的号码有逗号,我会得到一个随机数,而不是正确的答案。有什么建议么?问题与NSNumberFormatter

这里是我的等号按钮代码。每个操作我都有相同的代码。请原谅我糟糕的命名

test.firstnumbers是用户在第二组数字输入的数学问题

double number = [test.firstNumbers doubleValue]; 

    double otherNumber = [self.label.text doubleValue]; 

    double answer = number + otherNumber; 

    NSNumberFormatter *finalAnswer = [[NSNumberFormatter alloc]init]; 

    [finalAnswer setNumberStyle:NSNumberFormatterDecimalStyle]; 

    self.label.text = [finalAnswer stringFromNumber:[NSNumber numberWithDouble:answer]]; 

回答

2

双otherNumber = [自我之前存储的数字AA串。 labelTwo.text doubleValue];

您从不想使用显示结果的视图作为数据存储。这违反了MVC模式,而且通常只是一个糟糕的计划。您应该在显示器中存储数字(即使该“模型”与视图控制器中的实例变量一样简单)。除此之外,这可以避免将数字转换为文本然后返回数字,因此完全避免了您使用逗号时遇到的问题。

看看问题的直接原因,您正在使用NSString的-doubleValue方法将字符串转换为数字,但使用数字格式器将数字转换为字符串。正如你所看到的,这两者并不完全互补。使用数字格式化程序进行这两种转换,你会有更好的运气。但是,再一次,你真的不应该使用视图来保存操作数。

+1

好的,谢谢这帮了很多! (我更新了代码,但是我意识到我在代码中使用'labelTwo'事件时出现了输入错误。虽然我不认为这实际上改变了答案) – user3186310

0

我同意迦勒,你可以更好地将模型(数字计算)分开到视图+控制器的其余部分。

但是我认为问题是从字符串转换成'双值'转换:用点替换所有逗号可能是诀窍。

+0

动画显示“22,222,223”。如果你用点代替逗号,你会得到“22.222.223”。这没有比这更好。 –

+0

你说得对。我用这种方式解释它,因为意大利数字符号不会使用其他逗号数千。所以你必须除去小数点以外的其他逗号,并用点替换它。 –

1

这不是随机的,它是完全可预测的但错误的,因为doubleValue不解释逗号。

当显示当前字符串是22,222,223并尝试添加2,试图通过使用doubleValue得到的22,222,223的双重价值。但doubleValue不理解逗号,所以它在到达第一个时停止。因此,而不是22222223,您会得到22的值。该代码将2添加到它并得到24,这就是你所看到的。

要读取和解析包含逗号的数字,您可以再次使用NSNumberFormatter,这次使用numberForString方法。但是,正如@Caleb指出的那样,这是一个非常糟糕的设计。您应该将值存储在代码中的某个属性中,并在执行数学时使用该属性。除非是用户刚输入的内容,否则不要从用户界面读取数据。 永不将数据写入用户界面,然后将其读回,除非用户有某种方式更改该数据。

+0

谢谢,这有助于一吨! – user3186310