문제

내 생각,경우에는 사용자가 입력 t = 2.5, 다음 추출 2 0.5 에 별도로 2 개의 다른 변수입니다.그러나 나는 할 수 없습니다.

는 코드는 다음과 같습니다:

$ 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
도움이 되었습니까?

해결책

의 출력이 끊어집니다.당신은 실제로 값의 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

그것은 지금 더 명확한이 있는 라운딩 오류가 있습니다.이 경우에,당신은 던져 모든 소수소 할당하여 0.5 nsec, 이, long.인 nsec a float 대신 합니다.

다른 팁

또한 오래 가치를 저장하려고합니다.이것을 1000으로 곱하거나 nsec를 두 배로 만듭니다.

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

d가 1.5이면 오른쪽의 결과가 0.5 일 것이며, 이는 NSEC에 저장 될 때 암시 적으로 0으로 캐스팅됩니다.

당신은 노력하고 할당 .5long 는 일어나기 위하여 려고 하고 있지 않다.

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

printf("%d %f\n",i,j);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top