0

我的想法是,如果用户输入t = 2.5,那么我在 2 个不同的变量中分别提取 2 和 0.5 。但我无法做到这一点。

这是代码:

$ export LT_LEAK_START=1.5
$ echo $LT_LEAK_START
   1.5

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
 double d;
 time_t t;
 long nsec;

 d=strtod(getenv("LT_LEAK_START"), NULL);
 t=(time_t)d;

 nsec=d-(double)((time_t)d); // Extract fractional part as time_t always whole no.
 printf("d = %lf\n",d);
 printf("t = %u, nsec = %f\n",d,nsec);
}

输出是:

# ./a.out 
  d = 1.500000
  t = 0, nsec = 0.000000
4

3 回答 3

1

你的输出坏了。您实际上d在以下代码中写入了两次的值:

nsec=d-(double)((time_t)d); // Extract fractional part as time_t always whole no.
printf("d = %lf\n",d);
printf("t = %u, nsec = %f\n",d,nsec);

如果你这样写:

nsec=d-(double)((time_t)d); // Extract fractional part as time_t always whole no.
printf("d = %lf\n",d);
printf("t = %u, nsec = %f\n",t,nsec);

然后你会有输出:

d = 1.500000
t = 1, nsec = 0.000000

现在更清楚你有一个舍入错误。nsec在这种情况下,您通过将 0.5 分配给, a来去掉所有小数位long。换nsec一个float

于 2011-03-28T12:08:21.530 回答
0

您还尝试将小数值存储在 long 中。您要么需要将其乘以 1000,要么nsec翻倍。

nsec=d-(double)((time_t)d);

如果 d 为 1.5,则右侧的结果将为 0.5,当它存储在 nsec 中时,它将隐式转换为 0。

于 2011-03-28T12:09:06.250 回答
0

你试图分配.5一个long不会发生的事情。

double d = 1.5;
int i = (int)d;
double j = d - (double)i;

printf("%d %f\n",i,j);
于 2011-03-28T12:02:50.383 回答