c语言里用%f输出时能否避免四舍五入?

 我来答
四舍五不入6
高粉答主

2020-03-22 · 醉心答题,欢迎关注
知道答主
回答量:147
采纳率:100%
帮助的人:2万
展开全部

单纯用%f无法避免四舍五入。要避免四舍五入,需要自行编写函数,可以参考下面的方法:

利用取整时,强制截取整数部分,取出要输出的整数部分和小数部分。如保留三位小数,可以写作如下代码:

doublev=123.456789;//要输出的数。

inta,b;//整数部分和小数部分。

a=(int)v;//取整,得到整数部分。

b=(int)((v-a)*1000);//得到三位小数部分。

printf("%d.%03d\n",a,b);//分别输出小数部分和整数部分。

扩展资料:

printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。函数的原型为:

int printf(const char *format, ...);

函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。

printf()函数的调用格式为:

printf("<格式化字符串>", <参量表>);

其中格式化字符串包括两部分内容: 一部分是正常字符,这些字符将按原样输出:另一部分是格式化规定字符。

参考资料来源:百度百科-printf()

风若远去何人留
2017-05-02 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450104
专业C/C++软件开发

向TA提问 私信TA
展开全部

单纯用%f无法避免四舍五入。要避免四舍五入,需要自行编写函数。

实现方法有很多种,以常用两种举例说明:

1、 利用取整时,强制截取整数部分,取出要输出的整数部分和小数部分。 如保留三位小数,可以写作如下代码:

double v=123.456789;//要输出的数。
int a,b;//整数部分和小数部分。
a=(int)v;//取整,得到整数部分。
b=(int)((v-a)*1000);//得到三位小数部分。 
printf("%d.%03d\n", a, b);//分别输出小数部分和整数部分。

2、先输出到字符串,然后截取需要长度的小数部分,并输出。与上例相同功能的代码如下:

double v=123.456789;//要输出的数。
int i;//用作计数。
char s[100];//字符串缓存。
sprintf(s, "%lf", v);//将v存到字符串中,执行后s="123.456789"。
for(i = 0; s[i]!='\0'; i ++)
    if(s[i] == '.') break;//通过循环,找到小数点的位置。
s[i+4] = '\0'; //将小数点后第4位赋值为结束符,这样就实际保留了三位小数。此时s="123.456"
printf("%s\n",s);//输出结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
linnjing
2013-04-03 · TA获得超过2631个赞
知道大有可为答主
回答量:1230
采纳率:91%
帮助的人:499万
展开全部
你的意思是截断,不进行舍入?!
这个直接用是会自动进行舍入的,有个简单的办法,最低位先减掉0.5再输出,比如
输出12.34,输出格式"%.1f",直接输出结果是12.3,先减掉0.05得12.29,再输出结果是12.3
输出34.56.,输出格式"%.1f",直接输出结果是34.6,先减掉0.05得34.51,再输出结果是34.5
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小知知快长大
2013-04-03 · TA获得超过267个赞
知道小有建树答主
回答量:434
采纳率:0%
帮助的人:275万
展开全部
不能,在超过它的取值范围时,还是会四舍五入
追问
谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunmanpower
2013-04-03 · TA获得超过1158个赞
知道小有建树答主
回答量:353
采纳率:0%
帮助的人:257万
展开全部
当然可以的。
追问
那具体怎么弄?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式