作业帮 > 综合 > 作业

求浮点数小数点后的长度的程序怎么写?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/05 11:07:26
求浮点数小数点后的长度的程序怎么写?
一瞬间想不到太好的办法,这样是一个很笨的办法
int main(void)
{
char buffer[1000];//一个字符串缓冲区
double a = 1.0/3 + 23;//假定一个浮点数a是23.33333...
sprintf(buffer,"%lf",a-int(a));//这里将a减去整数部分之后化为字符串
printf("%lu",strnlen(buffer,1000)-2);//输出这个字符串长度,减去2,因为有"0."
\x05return 0;
}
再问: sprintf函数包含在哪里
再答: #include int sprintf( char *buffer, const char *format, ... ); #include size_t strlen( char *str ); 对不起,我上面用了一个函数strnlen,虽然这个函数很多编译器都有不过实际上不是c语言标准库函数,也可以用strlen,都差不多,只是strnlen会安全一点点
再问: 可以写完整点吗?我刚学有的还不知道!谢谢!
再答: #include #include int main(void) { char buffer[1000];//一个字符串缓冲区 double a ;//假定一个浮点数a是23.33333... unsigned long b;//保存最后的结果 scanf("%lf",&a);//输入一个double sprintf(buffer,"%lf",a-int(a));//这里将a减去整数部分之后化为字符串 b = strlen(buffer)-2; printf("%lu",b);//输出这个字符串长度,减去2,因为有"0." return 0; } 假设这是程序,变量a是输入的浮点数,变量b是输出的长度……我每句都注释了,不能再完整了
再问: 为什么总是6
再答: #include #include int main(void) { char buffer[1000];//一个字符串缓冲区 long double a ;//假定一个浮点数a是23.33333... unsigned long b;//保存最后的结果 scanf("%Lf",&a);//输入一个double sprintf(buffer,"%0.16Lf",a-( int )a);//这里将a减去整数部分之后化为字符串 b = strlen(buffer)-2; printf("%lu",b);//输出这个字符串长度,减去2,因为有"0." return 0; } 改了一下,最多支持小数点后16位的long double(比double 大一点,80位二进制),因为这个long double类型吧……顶多也就能保证16位左右的准确数值,超过16位就基本上是乱码了,而且这个还包括整数位的16位 所以你输入的浮点数要是整数+小数超过16位就……很难说了 当然了,还有一种方法,就是你用字符串保存浮点数,这要看你的程序到底想怎么做了……
再问: #include #include int main() { char a[101]; int i,n,l; gets(a); n=strlen(a); i=0; while(a[i]!='.') { i++; } l=n-i-1; printf("%d\n",l); return 0; } 你能帮我看一下怎样实现输入多组数据吗?
再答: #include #include int main() { char a[101]; int i,n,l; char c; while(1) { printf("请输入一个浮点数\n"); gets(a); n=strlen(a); i=0; while(a[i]!='.') { i++; } l=n-i-1; printf("%d\n",l); printf("是否继续输入浮点数,输入另一个浮点数继续,输入n结束\n"); do { scanf("%c",&c); } while (c == '\n'); if(c == 'n') break; } return 0; }