iOS中1000和1000.0之间的差异

Mik*_*yev 0 objective-c nstimer ios

这里我有一个代码来设置NSTimer对象的fireDate.

-(void)TimerFired:(NSTimer*)timer{
    long startTime=random()%1500+500;
    [timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:startTime/1000.0]];
    [controller startCarFromLane:self];
}
Run Code Online (Sandbox Code Playgroud)

在我编写的上面的代码中:startTime/1000.0我在相当长的时间内得到了计时器.但是,如果我将其更改为:startTime/1000(没有.0)计时器的下一个fireDate与上面的情况不同,计时器会更频繁地触发.我知道dateWithTimeIntervalSinceNow方法需要一个NSTimeInterval,它是一个double的typedef.但我不能把10.0写成10只?.0如何影响价值?

小智 6

当您只编写1000时,编译器意味着整数类型.因此,当划分两个整数(startTime是long并且1000可能是int)时,它将是整数除法,从而得到精确(精确)比率的最低值.例如,2500/1000将为2.但是,当您将1000写为1000.0时,编译器会发出一个浮点数.除以float的整数结果为float,因此2500/1000.0将为2.5,如预期的那样.基本上这就是为什么在简单使用整数时缩短间隔的原因.(换句话说,这就是整数除法抛除模数除以除数的事实).