给定一浮点数和整数n, 编写一函数把浮点数进行四舍五入以保留n位小数
不知道该如何入手啊,希望大家帮忙解答一下,拜托了
#include <stdio.h> #include <math.h> float Format(float f, int n) { int i = (int)f; int p = pow(10.0f, n); float ft = (f - i) * p; if((ft-(int)ft)>0.4)ft += 1; return i+((int)ft)/(float)p; } int main() { float f = 0; while(scanf("%f", &f) != EOF) printf("%f\n", Format(f,4)); return 0; }
/****************************************************************** 为了使可以转换的数字位数更多,所以使用字符数组来作。 如有不足之处,欢迎批评。谢谢。 ******************************************************************/ #include<stdio.h> #include<string.h> #define X {char c;while(c=getchar()!='\n');} #define N 1000 int ch(char a[],int n) { char *p; int i,b; b=strlen(a); /* 测出字符串长度 */ for(i=0;i<b;++i) if(a[i]=='.') break; /* 找出小数点的位置 */ if(b-i<n) /* 当小数点后的位数小于要保留的位数时 */ { printf("对不起,您输入的数字与所要保留的位数不符,请重新输入.\n"); sleep(1); /* ~~暂停屏幕1秒 */ return 0; /* 返回 0 ,要求重新输入 */ } p=a+i+n+1; /* 指针指向要保留的字符位数后一位 */ if(*p>'4') { *(p-1)+=1; *p='\0'; /* 如果保留字符后的数字大于4,保留字符加1,并在后*/ } /* 面加上结束标记 */ else *p='\0'; /* 如果保留字符后的数字小于4,直接将它重新赋为结束标记*/ return 1; /* 如果四舍五入成功,返回 1 */ } int main(void) { char a[N]; int n,b; do { system("cls"); /* 当输入出错后返回时,清屏 */ printf("请输入想要保留的小数后位数:\n"); scanf("%d",&n); X; /* 清除键盘缓存 */ printf("\n请输入您的数字:\n"); gets(a); /* 输入字符串*/ b=ch(a,n); /* 调用函数四舍五入 */ } while(!b); printf("\n四舍五入后的数字为:\n"); puts(a); getch(); }