c语言里用%f输出时能否避免四舍五入?
单纯用%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()
单纯用%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);//输出结果。
这个直接用是会自动进行舍入的,有个简单的办法,最低位先减掉0.5再输出,比如
输出12.34,输出格式"%.1f",直接输出结果是12.3,先减掉0.05得12.29,再输出结果是12.3
输出34.56.,输出格式"%.1f",直接输出结果是34.6,先减掉0.05得34.51,再输出结果是34.5
谢谢!
那具体怎么弄?