0

我试图让一个浮点变量精确到小数点后 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=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;
4

5 回答 5

5

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

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

或者

fbb = (double)bb / 1000
于 2013-09-20T10:01:45.697 回答
5

当你表演

 fbb = bb/1000;

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

尝试

fbb = ((double)bb)/1000.000;

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

于 2013-09-20T10:01:50.297 回答
1

当你表演

fbb = bb/1000;

它将操作视为 int/int 并返回一个 int。它的贬值。

也取long bb;而不是 int,因为 int 的高值是 32767。

尝试

fbb = bb/1000.000;

或者

fbb = (double)bb/1000;
于 2013-09-20T10:18:31.430 回答
0

bb是整数。进行 int 除法也是如此bb/1000,这再次导致 int = 1000(无小数)。该 int 值被强制转换为双精度值。

于 2013-09-20T10:02:18.357 回答
0

利用

fbb=(double)bb/1000;

bb是整数,结果是整数,然后转成double

于 2013-09-20T10:02:48.877 回答