Why is this simple piece of code not working?

2019-03-06 02:11发布

问题:

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;

回答1:

When you perform

 fbb = bb/1000;

It treats operation as int/int and returns an int

Try

fbb = ((double)bb)/1000.000;

It will be treated as (double)/(double) and return a double.



回答2:

bb is an int, so bb / 1000 will follow the integer division. Change either or both operand to a double. The simplest way is:

fbb = bb / 1000.0;       //type of 1000.0 is double

or

fbb = (double)bb / 1000


回答3:

When you perform

fbb = bb/1000;

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

fbb = bb/1000.000;

or

fbb = (double)bb/1000;


回答4:

bb is int. So bb/1000 is doing a int division, which results again in an int = 1000 (no decimals). That int value is cast to a double.



回答5:

Use

fbb=(double)bb/1000;

bb is integer and result is integer, and then converted to double