c语言里用%f输出时能否避免四舍五入?
1个回答
展开全部
单纯用%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);//输出结果。
实现方法有很多种,以常用两种举例说明:
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);//输出结果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询