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

比如3.145输出3.153.196输出3.23.00输出3... 比如 3.145输出3.15
3.196输出3.2
3.00输出3
展开
 我来答
zyl0462
推荐于2018-04-13 · TA获得超过1082个赞
知道小有建树答主
回答量:433
采纳率:75%
帮助的人:324万
展开全部
可以通过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的,与实际期望不符。
ayunlan
推荐于2016-02-26 · TA获得超过149个赞
知道答主
回答量:47
采纳率:0%
帮助的人:41.2万
展开全部
#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语句控制,基本的思路还是我程序里面写的内容。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
兔子和小强
2012-12-03 · TA获得超过6945个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1369万
展开全部
要对某个浮点数比如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; //进行四舍五入,注意考虑正负号
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xf1号
2012-12-03 · 超过11用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:28.5万
展开全部
把浮点数作为字符串输入,再比较最后一位是否为零,若为零则看倒数第二位;否则看是否大于等于5,若是则将倒数第二位加一并判断,否则直接舍去最后一位。最后输出修改后的字符串。
追问
这种办法试过了,太麻烦了,有没有有技巧性一点的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友555d0cf
2012-12-03
知道答主
回答量:15
采纳率:0%
帮助的人:4.6万
展开全部
%.nf(%.nlf)
看你要输出多少位小数,n就为多少
追问
你这个方法不是四舍五入法,其次它也不能过滤最后位为零的位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式