double 2 long
3 отговора
78 прегледа
double 2 long
Иамам следният неприятен (меко казано) проблем.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
cnv(char *cp)
{
int i; double d; long l;
d=(double)(atof(cp)*(double)100.0);
l=(long)d;
i=(int)d;
printf("%d %ld %f\n",i,l,d);
}
main()
{
cnv("4.70");
cnv("4.80");
cnv("4.60");
cnv("4.59");
}
Резултат:
470 470 470.000000
479 479 479.000000
459 459 459.000000
458 458 458.000000
Горният код е компилиран с GCC, MSC6, LCC, VC6++...на различни платформи и резултатът в общи линии е аналогичен. Някаква идея по въпроса?!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
cnv(char *cp)
{
int i; double d; long l;
d=(double)(atof(cp)*(double)100.0);
l=(long)d;
i=(int)d;
printf("%d %ld %f\n",i,l,d);
}
main()
{
cnv("4.70");
cnv("4.80");
cnv("4.60");
cnv("4.59");
}
Резултат:
470 470 470.000000
479 479 479.000000
459 459 459.000000
458 458 458.000000
Горният код е компилиран с GCC, MSC6, LCC, VC6++...на различни платформи и резултатът в общи линии е аналогичен. Някаква идея по въпроса?!
Re: double 2 long
xaxaxa tva ot BASIC v0.0000 ne go bqh pravil. ama to ba4ka ako ima6 primerno int 5 = ((int 5/2 *2)/10)*10... :) maitap4e....
Re: double 2 long
cnv(char *cp)
{
int i; double d; long l;
d=(double)(atof(cp)*(double)100.0);
l=(long)d;
i=(int)d;
printf("%d %ld %.17f\n",i,l,d);
}
Резултат:
470 470 470.00000000000000000
480 480 480.00000000000000000
459 459 459.99999999999994316
459 459 459.00000000000000000
cnv(char *cp)
{
int i; double d; long l;
d=(double)(atof(cp)*(double)100.0) + 0.5;
l=(long)d;
i=(int)d;
printf("%d %ld %.17f\n",i,l,d);
}
Резултат:
470 470 470.50000000000000000
480 480 480.50000000000000000
460 460 460.49999999999994316
459 459 459.50000000000000000
Това с gcc-3.2.3
{
int i; double d; long l;
d=(double)(atof(cp)*(double)100.0);
l=(long)d;
i=(int)d;
printf("%d %ld %.17f\n",i,l,d);
}
Резултат:
470 470 470.00000000000000000
480 480 480.00000000000000000
459 459 459.99999999999994316
459 459 459.00000000000000000
cnv(char *cp)
{
int i; double d; long l;
d=(double)(atof(cp)*(double)100.0) + 0.5;
l=(long)d;
i=(int)d;
printf("%d %ld %.17f\n",i,l,d);
}
Резултат:
470 470 470.50000000000000000
480 480 480.50000000000000000
460 460 460.49999999999994316
459 459 459.50000000000000000
Това с gcc-3.2.3