I am trying to get a floating variable accurate to just 3 decimal points for a comparison calculation. I am trying the method below, but it doesn't work. I can't see why not, so please can someone tell me where I am going wrong.
Output from this code is b = 10000.050617, bb = 10000050 and fbb = 10000.000
. I want fbb to be 10000.050.
int bb; double m,n,p,q,b,t,u,fbb;
m=24.161, n=57.695, p=67.092, q=148.011;
t=p-m; u=q-n;
b=t*t+u*u; bb=b*1000; fbb=bb/1000;
printf("b=%.6lf,bb=%i,fbb=%.3lf\n",b,bb,fbb);
return 0;
Use
bb is integer and result is integer, and then converted to double
bb
is int. Sobb/1000
is doing a int division, which results again in an int = 1000 (no decimals). That int value is cast to a double.bb
is anint
, sobb / 1000
will follow the integer division. Change either or both operand to adouble
. The simplest way is:or
When you perform
It treats operation as
int/int
and returns anint
Try
It will be treated as
(double)/(double)
and return adouble
.When you perform
It treats operation as int/int and returns an int. its demotion of value.
Also take
long bb;
instead of int as int has value 32767 as its high value.Try
or