C语言 从一天的获取时间开始的时间没有按应有的方式更新


#include <stdio.h>
#include <sys/time.h>
int main()
{
   float time;
   struct timeval tv;
   gettimeofday( &tv, NULL );
   time = tv.tv_sec + ( tv.tv_usec / 1000000.0 );
   printf( "time: %fn", time );
   return 0;
}

反复运行此代码生成的二进制文件,我倾向于获得相同的时间值:

$ ./a.out
time: 1348059520.000000
$ ./a.out
time: 1348059520.000000
$ ./a.out
time: 1348059520.000000

这种情况会一直持续到几秒钟后,此时我得到了更新的时间值。

看来float太小而无法包含tv.tv_sec + ( tv.tv_usec / 1000000.0 )的结果。请改用double

#include <stdio.h>
#include <sys/time.h>
int main()
{
   double time;
   struct timeval tv;
   gettimeofday( &tv, NULL );
   time = tv.tv_sec + ( tv.tv_usec / 1000000.0 );
   printf( "time: %fn", time );
   return 0;
}

为什么要使用浮点数?

#include <stdio.h>
#include <sys/time.h>
int main (void)
{
   struct timeval tv;
   gettimeofday (&tv, NULL);
   printf ("time: %d.%06dn", (int)tv.tv_sec, (int)tv.tv_usec);
   return 0;
}
./a.out
time: 1348067289.069908

看起来很飘逸,但它很不舒服:-)由于微秒值在 0..999999 范围内,您需要做的就是将其零填充为 6 位数字。无需FP算术。

相关内容

  • 没有找到相关文章

最新更新