为什么这段简单的代码不起作用?

我试图将浮动变量精确到3个小数点进行比较计算。 我正在尝试下面的方法,但它不起作用。 我不知道为什么不,所以请有人告诉我哪里出错了。

此代码的输出为b = 10000.050617, bb = 10000050 and fbb = 10000.000 。 我希望fbb为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=pm; u=qn; b=t*t+u*u; bb=b*1000; fbb=bb/1000; printf("b=%.6lf,bb=%i,fbb=%.3lf\n",b,bb,fbb); return 0; 

当你表演

  fbb = bb/1000; 

它将操作视为int/int并返回int

尝试

 fbb = ((double)bb)/1000.000; 

它将被视为(double)/(double)并返回一个double

bb是一个int ,所以bb / 1000将遵循整数除法。 将操作数中的一个或两个更改为double 。 最简单的方法是:

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

要么

 fbb = (double)bb / 1000 

当你表演

 fbb = bb/1000; 

它将操作视为int / int并返回int。 它的价值降级。

也需要long bb; 而不是int作为int的值为32767作为其高值。

尝试

 fbb = bb/1000.000; 

要么

 fbb = (double)bb/1000; 

bb是int。 所以bb/1000正在进行一个int分区,它再次产生一个int = 1000(无小数)。 该int值被转换为double。

使用

 fbb=(double)bb/1000; 

bb是整数,结果是整数,然后转换为double