Objective c NSDate使用floorf删除小数产生奇怪的输出
我有一个简单的代码片段,它每1秒运行一次循环,并使用NSDate显示自epoch以来的秒数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
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