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

时间:2013-09-20 09:57:32

标签: c floating-point double

我试图将浮动变量精确到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;

5 个答案:

答案 0 :(得分:5)

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

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

fbb = (double)bb / 1000

答案 1 :(得分:5)

执行时

 fbb = bb/1000;

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

尝试

fbb = ((double)bb)/1000.000;

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

答案 2 :(得分:1)

执行时

fbb = bb/1000;

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

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

尝试

fbb = bb/1000.000;

fbb = (double)bb/1000;

答案 3 :(得分:0)

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

答案 4 :(得分:0)

使用

fbb=(double)bb/1000;

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