这里我有一个设置NSTimer对象的fireDate的代码。
-(void)TimerFired:(NSTimer*)timer{
long startTime=random()%1500+500;
[timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:startTime/1000.0]];
[controller startCarFromLane:self];
}
在我编写的上面的代码中:startTime / 1000.0我在相当长的时间内得到了计时器。但是,如果我将其更改为:startTime / 1000(没有.0)计时器的下一个fireDate与上面的情况不同,计时器会更频繁地触发。我知道dateWithTimeIntervalSinceNow方法需要一个NSTimeInterval,它是一个double的typedef。但我不能把10.0写成10只? .0如何影响价值?
答案 0 :(得分:6)
当您只编写1000时,编译器意味着整数类型。因此,当划分两个整数(startTime是long并且1000可能是int)时,它将是整数除法,从而得到精确(精确)比率的最低值。例如,2500/1000将为2.但是,当您将1000写为1000.0时,编译器会发出一个浮点数。除以float的整数结果为float,因此2500 / 1000.0将为2.5,如预期的那样。基本上这就是为什么在简单使用整数时缩短间隔的原因。 (换句话说,这就是整数除法抛弃模数除以除数的事实。)
答案 1 :(得分:3)
由于整数/长整数完全删除了小数部分,并且因为startTime
被声明为long
,因此startTime/1000
的结果是整数。 startTime/1000.0
的结果是双倍的,因为1000.0
会将除法的结果强制为double
。您还可以明确指定类型double
,如下面的代码段所示:
-(void)TimerFired:(NSTimer*)timer{
double startTime=random()%1500+500;
[timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:startTime/1000]];
[controller startCarFromLane:self];
}
答案 2 :(得分:2)
使用1000
,因为startTime
也是一个整数类型,所以得到整数除法。即如果startTime
小于1000,则该除法将产生0。
使用1000.0
,您会得到一个浮点除法,看起来就像您想要的那样。
答案 3 :(得分:1)
.0使值为浮点而不是int。除了整数,你也得到一个int;也就是说,1/2 = 0.当你划分浮点数时,你得到一个浮点数,即1.0 / 2.0 = 0.5。