gpt4 book ai didi

ios - 整数不能做数学吗?

转载 作者:行者123 更新时间:2023-12-01 17:23:49 24 4
gpt4 key购买 nike

我的in值设置为10。然后使用以下代码运行NSTimer:[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
我的空白看起来像这样

  -(void)updateTimer {
timeLeft = timeLeft -0.01;
NSString *string = [NSString stringWithFormat:@"%i",timeLeft];
[timer setString:string];
NSLog(string);

}

我正在使用Coco2D,这不是问题
在我的日志中这样显示
2012-06-05 17:28:56.030 NumberPop[31291:10a03] 9
2012-06-05 17:28:57.030 NumberPop[31291:10a03] 8
2012-06-05 17:28:58.030 NumberPop[31291:10a03] 7
2012-06-05 17:28:59.030 NumberPop[31291:10a03] 6
2012-06-05 17:29:00.030 NumberPop[31291:10a03] 5
2012-06-05 17:29:01.030 NumberPop[31291:10a03] 4
2012-06-05 17:29:02.030 NumberPop[31291:10a03] 3
2012-06-05 17:29:03.030 NumberPop[31291:10a03] 2
2012-06-05 17:29:04.029 NumberPop[31291:10a03] 1
2012-06-05 17:29:05.029 NumberPop[31291:10a03] 0
2012-06-05 17:29:06.029 NumberPop[31291:10a03] 0
2012-06-05 17:29:07.029 NumberPop[31291:10a03] 0
2012-06-05 17:29:08.030 NumberPop[31291:10a03] 0
2012-06-05 17:29:09.029 NumberPop[31291:10a03] 0
2012-06-05 17:29:10.030 NumberPop[31291:10a03] 0
2012-06-05 17:29:11.029 NumberPop[31291:10a03] 0
2012-06-05 17:29:12.029 NumberPop[31291:10a03] 0

0永远持续下去。
我很迷茫,有帮助吗?

最佳答案

所以很好奇您为什么要尝试从int减去.01。但是,当您执行此操作时,结果将被截断为int。因此,如果您从9中减去.01,您将获得8.99,但int无法存储8.99,因此它仅被存储为8。一旦降至0,它就会执行相同的操作。 0-.01 = -0.01,它将被截断为0。因此,您始终从该分配中获得零。

而是尝试这样的事情:
timeLeft = timeLeft - 1;
甚至更好
timeLeft --;
上面的任何一种都会继续将整数减小到零以下,例如:-1,-2,-3...。当然,假设它是一个无符号的int(即int)。

另外,如果您希望将计时器停止为零,则需要在剩余时间为零时使计时器无效。在这里查看更多信息:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/nstimer_Class/Reference/NSTimer.html#//apple_ref/occ/instm/NSTimer/invalidate

基本上,执行以下操作:

timeLeft --;
if (timeLeft <= 0) [timer invalidate];

有一些重要的东西要理解。 NSTimer不保证将在您指定的时间间隔准确地调用它。基本上,它会在每个运行循环中检查是否应触发,然后在适当时执行。但是,您永远不会比运行循环更频繁地触发NSTimer。这意味着,如果运行循环花费的时间比正常时间长,或者您的时间间隔太短,则在触发之前可能会跳过几个时间间隔。因此,通过减少数字(如您似乎正在做的事情)来计算“时间”是行不通的。相反,您将需要找到另一种方法,例如在启动计时器时设置启动NSDate变量,然后根据启动时间检查每个计时器启动时的当前时间。

NSDate在其计算中返回相当精细的粒度。因此,如果您采用开始日期,则可以通过以下操作获取自该日期以来的时间间隔:
NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:startDate];
NSTimeInterval是 double。因此,您可以将其转换为如下所示的字符串:
NSString *string = [NSString stringWithFormat:@"%f", interval];
或限制小数位数:
NSString *string = [NSString stringWithFormat:@"%.2f", interval];
这应该给您您想要的东西。

关于ios - 整数不能做数学吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10906374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com