对象数学小数

时间:2012-06-22 17:36:04

标签: objective-c math calculus

我有一个有趣的情况需要解决,它更像是一个测验:)

我必须重新创建一个简单的计算器,我有两个上/下按钮。 这两个按钮的功能是简单的,它们取当前值,它总和为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&gt; 23.1231 ......

那么,我怎样才能真正解决这个问题呢?

谢谢你们!

1 个答案:

答案 0 :(得分:1)

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

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

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

2)您的代码以浮点数的字符串表示开始,该表示似乎仅限于数字和小数点 - 即没有指数。然后,您可以创建要添加的数字的字符串。然后你转换为浮点,事情开始出错。为什么要转换为浮点?您可以使用字符串完成所有操作。从最后一个字符(最右边)开始,查找并“添加”一个 - 如果它是'1'你需要'2',如果字符是'9',你想要'0' 1}}和“携带”1.现在移动到下一个角色...