在C语言中如何不四舍五入保留小数

如2.556,我要的是2.55

如果你是单纯为了把这个数打印出来,那么用%2f就可以了。
但是如果你要在程序中做运算的时候希望能够不四舍五入地保留小数,
那下面的方法可以做到。

#include <math.h>

main()
{
int k = 3;
double number = 655.12345;

number = (int)(number) +
((int)((number-(int)(number))*pow(10.0,k)))/pow(10.0,k);
printf("%f\n",number);
getch();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-09
float a=2.556;
printf("%.2f\n",a);
%.2f的意思就是保留两位小数
另外,%6.2表示,整个数的宽度(包括小数点)为6位,小数部分(不包括小数点)占两位。若整个数的宽度不足六位,则左边补空格;超过六位则忽略6。
%-6.2f与上面的含义基本相同,只是当整个数的宽度不足六位时是右边补空格
第2个回答  2010-10-09
%.2f 就可以解决了,另外c语言不是四舍五入而是直接截断,所以说不管你是2.558还是2.553 得到的都是2.55
代码:
#include<stdio.h>

void main()
{
double a=2.556;
printf("a=%.2f\n",a);
}
第3个回答  2010-10-10
#include<stdio.h>
main()
{
float xs(float,int);
float i,result;
printf("input i: ");
scanf("%f",&i);
result=xs(i,2);
printf("result=%.2f",result);

}
float xs(float a,int b) /*a是待转换数据,b是小数有效位数*/
{
int i,j=1;
float ans; /*ans表示转换结果*/
for(i=1;i<=b;i++)
j*=10;
ans=(int)(a*j)*1.0/j;
return ans;
}
第4个回答  2010-10-10
那就用 单精度float 或 用双精度 double 就可以 有小数了
#include<stdio.h>
void main()
{ float a=2.556;
printf("%.2f",a);
getch();
}
这样输出的结果就是 2.55了
相似回答