C语言如何实现输出浮点数小数点两位(四舍五入法),但若小数点最后位为零则舍去??

比如 3.145输出3.15
3.196输出3.2
3.00输出3

可以通过sprintf函数实现数字四舍五入转字符串,通过处理字符串,实现所需功能,具体代码,

#include <stdio.h>
int main(int argc, char *argv[])
{
char buffer[40];//存储float数据
float fnum=12.396;//待测试数据
sprintf(buffer,"%.2f",fnum);//四舍五入转化为字符串
int i=0;
for(;*(buffer+i)!='.';i++);//统计小数点的位置
if(*(buffer+i+2)=='0')//处理小数点后第二位字符,如果为0,替换为'\0'
*(buffer+i+2)='\0';
printf("四舍五入后,数据变为:%s\n,",buffer);

return 0;
}

float 为单精度浮点型数据,在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供7位有效数字。建议输入采用字符串形式,这样统计不会出偏差,使用数字时,使用double atof( const char *str )函数转换;如果使用数字,系统会自动补0的,与实际期望不符。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-02-26
#include<stdio.h>
mian()
{
float n;
float num1,num2;
printf("请输入一个小数:");
scanf("%f",&n);

num1=(int)(n*100+0.5);
int i,j;
i=num1%10;
num2=mum1/10;
j=mum2%10;
if(i==0 && j==0)
printf("/n四舍五入后为:%d",(int)num1);
else
printf("/n四舍五入后为:%.2f",num1);

}追问

请问要是小数点后的位数不是两位,可以人为指定保留小数点后的位数,比如小数点后3位,4位,且格式同上要求该怎么实现呢?

追答

如果要认为指定小数点后面的位数的话,你就自己加一个判断语句,看需要保留到第几位,用if语句控制,基本的思路还是我程序里面写的内容。

本回答被提问者采纳
第2个回答  2012-12-03
要对某个浮点数比如x保留到小数点后两位,可以将x乘以100,变成对这个数进行四舍五入到个位。
double f(double x)
{
double j = (x>=0?1.0:-1.0); //j是符号
return int(abs(x)*100+0.5)/100.0*j; //进行四舍五入,注意考虑正负号
}本回答被网友采纳
第3个回答  2012-12-03
把浮点数作为字符串输入,再比较最后一位是否为零,若为零则看倒数第二位;否则看是否大于等于5,若是则将倒数第二位加一并判断,否则直接舍去最后一位。最后输出修改后的字符串。追问

这种办法试过了,太麻烦了,有没有有技巧性一点的

第4个回答  2012-12-03
%.nf(%.nlf)
看你要输出多少位小数,n就为多少追问

你这个方法不是四舍五入法,其次它也不能过滤最后位为零的位

相似回答