0

我有一个有趣的问题要解决,它更像是一个测验:)

我必须重新创建一个简单的计算器,并且我有两个带有向上/向下的按钮。这两个按钮的功能很简单,它们取当前值并求和 1 或取 1。所以我设法创建了一个小函数,将值转换为字符串,如果是 34.1,我创建新值 0.1加或减。

- (float)findFloatValueToAdd:(NSString *)aString
{
  NSMutableString *val = [NSMutableString stringWithCapacity:aString.length];

  for (int i = 0; i < aString.length; i++)
    [val appendFormat:@"0"];

  if ([aString rangeOfString:@"."].location != NSNotFound)
    [val replaceCharactersInRange:NSMakeRange([aString rangeOfString:@"."].location, 1)
                       withString:@"."];

  [val replaceCharactersInRange:NSMakeRange(aString.length-1, 1)
                     withString:@"1"];

  return [val floatValue];
}

主要问题是当我有很多像 23.1234212 这样的小数时。如果我必须上涨,它会直接跳到 23.12342,同样下跌。如果我继续从 23.12342 下降,它将变为 23.12341 > 23.1234,但随后变为 23.1233>23.1232>23.1231...

那么,如何才能真正解决这个问题呢?

多谢你们!

4

1 回答 1

1

正如其中一条评论所说,这听起来确实有点像家庭作业……您可以探索两个想法:

1)你如何显示结果?如果您不知道诸如 %5.2f 之类的格式是什么意思,请查明 - 查找格式规范。这可以解释明显的截断,但是......

使用数字来做你想做的事情是很棘手的。计算机使用以 2 为底的算术,而浮点数的精确数字范围有限——这与数学不同。如果这没有意义,请考虑分数 1/3,它的十进制表示形式是什么?0.333333333 ad nasuem。一种表示形式的值在另一种表示中可能没有完全等价的值,这对于您编写的十进制数及其计算机以二进制浮点形式表示的值是相同的。所以:

2)您的代码以浮点数的字符串表示形式开始,它似乎仅限于数字和小数点 - 即没有指数。然后,您创建一个要添加的数字字符串。然后你转换为浮点数,事情就开始出错了。为什么要转换为浮点数?你可以用strings来做这一切。从最后一个字符(最右边)开始,查找并“添加”一个 - 所以如果它是'1'你想要的'2',如果字符是'9'你想要 a'0'和 1 的“进位”。现在移动到下一个字符......

于 2012-06-22T18:48:30.940 回答