计算难题 - 我如何影响另一个文本域?

时间:2010-03-08 13:34:23

标签: iphone objective-c time

基本上我有一个问题,当我的计算器应用程序中使用某些参数时 - 它会导致结果不正确。问题是我有几小时和几分钟的单独文本字段,并说例如我在一个文本字段中作为开始时间“13”而在另一个文本字段中具有“30”,其中完成时间为“24”和“00”各自的文字字段。答案应该是10小时30分钟,但我得到的答案是11小时30分钟。代码如下。

 -(IBAction)done:(id)sender {
  int result = [finishHours.text intValue] - [startHours.text intValue];
  totalHours.text = [NSString stringWithFormat:@"%d", result];
  if (result < 0) { 
    totalHours.text = [NSString stringWithFormat:@"%d", result + 24];
  }



    -(IBAction)done2:(id)sender {
  int result = [startMinutes.text intValue] - [finishMinutes.text intValue];
  totalMinutes.text = [NSString stringWithFormat:@"%d", result];
  if (result < 0) {
    totalMinutes.text = [NSString stringWithFormat:@"%d", result + 60];
  }
}

我想这样做,如果满足某些参数,则totalHours.text减少1小时以反映总分钟数。我将如何在代码中进行计算?

谢谢!

1 个答案:

答案 0 :(得分:2)

您应首先将开始和结束时间转换为单个单位(分钟),减去分钟数,然后转换回小时数:分钟。

例如,将startTotalMinutes计算为startHours * 60 + startMinutes。完成时间也一样。从finishTotalMinutes中减去startTotalMinutes。补偿低于零的结果(我想只需加1440)。然后将结果转换回小时:分钟。对于小时,做结果mod 60,剩余部分是结果分钟。

编辑:下面是请求的代码示例。另请注意,将小时数除以60并且分钟的结果为60模式。

- (int)hoursMinutesTextToMinutes:(NSString *)hoursText minutesText:(NSString *)minutesText
{
    return [hoursText intValue] * 60 + [minutesText intValue];
}

-(IBAction)done:(id)sender
{
    int startTotalMinutes = [self hoursMinutesTextToMinutes:startHours.text minutesText:startMinutes.text];
    int finishTotalMinutes = [self hoursMinutesTextToMinutes:finishHours.text minutesText:finishMinutes.text];

    int difference = finishTotalMinutes - startTotalMinutes;
    if (difference < 0)
    {
        difference += 1440;
    }

    int diffHours = difference / 60;
    int diffMinutes = difference % 60;

    totalHours.text = [NSString stringWithFormat:@"%d", diffHours];
    totalMinutes.text = [NSString stringWithFormat:@"%d", diffMinutes];
}

hoursMinutesTextToMinutes是一个帮助方法,它返回小时:分钟文本只需一分钟int。这样可以避免重复该代码。

只需要一个按钮动作(我使用“完成”)。

请注意,这不会对输入的文字进行任何验证。您应该添加验证或使用UIDatePicker让用户指定开始/结束时间。