NSDate 使用 floorf 丢弃小数点会产生奇怪的输出

NSDate dropping decimal with floorf produces strange output

我有一个简单的片段,它每 1 秒运行一个循环,并使用 NSDate 显示自纪元以来的秒数。

        while(1){
            NSDate *now = [NSDate date];
            NSTimeInterval nowEpochSeconds = [now timeIntervalSince1970];
            NSLog(@"%f",nowEpochSeconds);
            [NSThread sleepForTimeInterval:1.0f];
        }

nowEpochSeconds 产生一个以秒为单位的浮点值,这样有几个小数位

1568646562.613972
1568646563.618479
1568646564.621624
1568646565.626183
1568646566.626722
1568646567.628425
1568646568.633329

非常接近一秒间隔。然后我尝试使用 floorf

删除小数位
NSLog(@"%f",floorf(nowEpochSeconds));

但是秒数保持不变。这不是正确的秒数,或者它们只是停滞在一个值

1568646528.000000
1568646528.000000
1568646528.000000
1568646528.000000
1568646528.000000
1568646528.000000

我不知道为什么 floorf 给我奇怪的结果

NSTimeIntervaldouble,因此您可能希望使用 floor():

int j = 0;
while(++j < 6){
    NSDate *now = [NSDate date];
    NSTimeInterval nowEpochSeconds = [now timeIntervalSince1970];
    NSLog(@"%f",nowEpochSeconds);
    NSLog(@"%f",floor(nowEpochSeconds));
    NSLog(@"\n");
    [NSThread sleepForTimeInterval:1.0f];
}

输出:

1568648630.428520
1568648630.000000

1568648631.429841
1568648631.000000

1568648632.431206
1568648632.000000

1568648633.432594
1568648633.000000

1568648634.433988
1568648634.000000