繁体   English   中英

NSNumberFormatter的问题

[英]Problems with 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]];

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

您永远不想使用显示结果的视图作为数据存储。 这违反了MVC范式,而且通常是一个糟糕的计划。 您应该将显示中的数字存储在数据模型中(即使该“模型”与视图控制器中的实例变量一样简单)。 除了其他好处之外,这还避免了将数字转换为文本然后再转换为数字的需要,因此完全避免了您使用逗号时出现的问题。

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

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

当显示的当前字符串是22,222,223并且您尝试添加2 ,您尝试使用doubleValue获取22,222,223的double值。 但是doubleValue不理解逗号,因此它在到达第一个时停止。 因此,不是22222223 ,而是获得22的值。 代码为它添加2并获得24 ,这就是你所看到的。

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

我同意Caleb,你可以将模型(数字计算)更好地分离到其他视图+控制器。

但是我认为问题在于从字符串转换为'double value':用点替换所有逗号都可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM