关于用C语言求一个小数求小数点后面的位数多少的问题,求大神解答。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于用C语言求一个小数求小数点后面的位数多少的问题,求大神解答。相关的知识,希望对你有一定的参考价值。
#include<stdio.h>
//#include<math.h>
void main()
float num;
int flag=0;
scanf("%f",&num);
printf("%f\n",num);
printf("%d\n",flag);
num=num-(int)num;
printf("%f\n",num);
while(num>0)
num=num*10;
flag++;
num=num-(int)num;
printf("%f\n",num);
// printf("%d\n",flag);
printf("%d\n",flag);
我运行了这个,发现num的值后来会出现乱码 求解决
因为float精确到小数点后6位。
我建议你通过这样的方式来计算:
不定义浮点数,而是定义字符串,然后从小数点开始计算后面的长度即可。
最主要的是假设你输入一个1.123456789123456789除了使用字符串的方式你无法通过正常的浮点数数据类型来精确计算。 参考技术A 这样肯定不行。
用double也好float也好,都存储的不是准确的值,都是一个近似值。用浮点型运算,结果每次运算都会产生误差,导致错误。
你还是用字符串输入,然后遍历这个串吧 参考技术B 去除末尾0后,用字符串比较好,
c语言中如何保存一个位数不限的小数?
原题要求将一个八进制小数转为十进制。要求输入一个小数,但尾数位数不限,应该用什么保存小数呢?链表吗?链表好像后面运算挺不方便的。。额,谢谢~
不能用数组、字符串的,因为不知道长度!!谢谢。。
不知道长度就可以动态申请内存空间啊,malloc就行了哈 参考技术B 我编了一个用字符串来存储小数的程序,你试试。但是输入的小数位数n不能太长,否则计算8^(-n)时会溢出
/*
输入示例:0.1234
*/
#include <stdio.h>
#include <math.h>
int main()
char a[]="\0";
char *p=a;
int i=0;
double sum=0;
scanf("0.%s",a);
while (*(p+i)!='\0')
sum+=(double)(*(p+i)-48)*(double)pow(8,-(i+1));
/*
*(p+i)-48表示输入的数字字符(如‘1’)的整形数值
*/
i++;
printf("the result is %lf\n",sum);
return 0;
参考技术C 可以用字符数值,你把数组长度定义大点就是
即使是用链表,长度也不可能无限长,毕竟内存是有限的 参考技术D 有长度规定啊,超过的长度只能自己写个struct 第5个回答 2010-01-29 用数组即可。
用malloc()/realloc()动态分配数组空间即可:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void)
int i=0;
char ch,*num=NULL;
while ((ch=getchar())!='\n') /*读取字符并存入num数组,以回车结束输入*/
num=num?realloc(num,sizeof(char)*++i):malloc(sizeof(char)*++i);
num[i-1]=ch;
num=num?realloc(num,sizeof(char)*++i):NULL;
num[i-1]='\0';
puts(num); /*输出字符串*/
free(num);
return 0;
//---------------------------------------------------------------------------本回答被提问者采纳
以上是关于关于用C语言求一个小数求小数点后面的位数多少的问题,求大神解答。的主要内容,如果未能解决你的问题,请参考以下文章
C语言中 小数点前、后面的零怎么控制输出 比如,0.001-变为.001;200.00变为200;200.1不变。