我试图将浮动变量精确到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;
答案 0 :(得分:5)
bb
是int
,因此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