Objective c NSDate使用floorf删除小数产生奇怪的输出

Objective c NSDate使用floorf删除小数产生奇怪的输出,objective-c,floor,Objective C,Floor,我有一个简单的代码片段,它每1秒运行一次循环,并使用NSDate显示自epoch以来的秒数 while(1){ NSDate *now = [NSDate date]; NSTimeInterval nowEpochSeconds = [now timeIntervalSince1970]; NSLog(@"%f",nowEpochSeconds); [NSThread sleepFo

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

        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会给我奇怪的结果

NSTimeInterval
是一个
双精度
,所以你可能想使用
floor()


NSTimeInterval
是一个
double
,因此您可能希望使用
floor()


float
仅适用于约7或8位有效数字。所以是的,当小数点前有10位时,四舍五入到一个
float
将是一个问题。一个
float
只适用于大约7或8位有效数字。因此,是的,当小数点前有10位数字时,四舍五入到浮点将是一个问题。
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