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 给我奇怪的结果
NSTimeInterval
是 double
,因此您可能希望使用 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
我有一个简单的片段,它每 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 给我奇怪的结果
NSTimeInterval
是 double
,因此您可能希望使用 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