Objective c 数学十进制

Objective c 数学十进制,objective-c,math,calculus,Objective C,Math,Calculus,我有一个有趣的问题要解决,它更像是一个测验:) 我必须重新创建一个简单的计算器,我有两个上下按钮。 这两个按钮的功能是simpe,它们取当前值,求和为1或1 以1为例。因此,我设法创建了一个小函数,将值转换为字符串,在34.1的情况下,我创建了一个新值0.1进行加法或减法 - (float)findFloatValueToAdd:(NSString *)aString { NSMutableString *val = [NSMutableString stringWithCapacity:a

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

我必须重新创建一个简单的计算器,我有两个上下按钮。 这两个按钮的功能是simpe,它们取当前值,求和为1或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];
}
-(float)findFloatValueToAdd:(NSString*)aString
{
NSMutableString*val=[nsmutablestringwithcapacity:aString.length];
for(int i=0;i
主要的问题是当我有很多像23.1234212这样的小数时。如果我必须上升,它会直接跳到23.12342,同样下降。如果我继续从23.12342下降,它会下降到23.12341>23.1234,但随后会下降到23.1233>23.1232>23.1231

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


谢谢大家

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

1) 您如何显示结果?如果您不知道像%5.2f这样的格式意味着什么,那么请找出-查找格式规范。这可以解释明显的截断,然而

用数字做你想做的事是很棘手的。与数学不同,计算机使用的是基数为2的算术运算,而浮点运算的精确数字范围有限。如果分数不到1/3,那么它的十进制表示是什么?公元0.333年。一种表示法中的值在另一种表示法中可能没有完全等效的值,这与您编写的十进制数以及计算机以二进制浮点表示的十进制数是相同的。因此:


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

我不太理解这个问题。你是说你想记录原始的小数位数吗?还有,这是家庭作业吗?我不是很理解这个问题。。你说你想求和1或取1,然后你说你在给你的数字加1。你能列举一些正在发生什么和应该发生什么的具体案例吗?这不是家庭作业,它是一个真正的项目。我的客户想使用自定义计算器,所以我创建了一个自定义键盘,其中的上/下按钮也靠近常规的0>9按钮。这个向上/向下需要做的是添加或删除1,但这很棘手,我们可以使用非常简单的整数,但也可以使用浮点数,如23.32134。因此,在这种情况下,我应该添加/sub 0.00001。第一次还行,但不幸的是,当我读到23.32130(最后一个零不会显示)时,我不得不降到23.32129,实际上它没有降到23.3212(从23.3213开始)。@DigitalVanilla-我建议你走字符串路线。您可以将“数字”作为字符串保存在显示器中,并在用户按键时将其建立起来。对于向上/向下,请使用上面(2)中的算法。你只需要在做更复杂的数学时转换成一个数字,在这一点上,
NSDecimalNumber
可能是一种方法——这取决于你需要支持什么数学运算以及你自己准备做多少编码。[最初的计算器,有些可能仍然使用,将数字存储在BCD中,便于显示,并开发了BCD数学算法-查找CORDIC。]非常感谢!我将发布我的最终方法,以便在其他人需要时与大家分享。