基本上我有一个问题,当我的计算器应用程序中使用某些参数时 - 它会导致结果不正确。问题是我有几小时和几分钟的单独文本字段,并说例如我在一个文本字段中作为开始时间“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小时以反映总分钟数。我将如何在代码中进行计算?
谢谢!
答案 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让用户指定开始/结束时间。