c语言中关于如何判断一个浮点小数有几位小数的问题

我在编写C程序时遇到一个需要判断一个浮点小数有几位小数的问题,于是 我便想到用if((n*10)==(int)(n*10))来判断n是否是一位小数,同样用if ((n*100)==(int)(n*100))来判断n是否是两位小数,于是我便在turbo C中写 了这么一段程序来测试 #include<stdio.h> main() { float a; scanf("%f",&a); if((a*100)==(int)(a*100)) printf("Y\n"); else printf("N\n"); } 按理来说我输入任何一个小数部分不超过2位的数都应该输出“Y”,可是运 行时我只有输入0.25、0.75、0.5时输出的才是"Y",其它的都是“N”,这令 我百思不得其解。 比如说我输入0.12,a*100就是12,而(int)(a*100)显然也 是12,因此if语句就是真的,但运行结果是输出“N”,按理说只有当我输 入多于两位小数(比如是0.235)才会是“N”,因为0.235*100=23.5,而 (int)(0.235*100)则是23,所以为假。将上面的100改为10的时候,只输入0 和0.5的时候是“Y”。我运行了好几遍都是这样,搞的我头都大了。在此我 想请教各位高手这是怎么一回事,能否提供更好的判断有几位小数的方法, 在下不胜感激。我很着急!!!

简单的想了下,大概有两种方法:

    使用 sprintf 等把浮点数转换成字符串的函数,然后统计字符串的位数(感觉怪怪的);

    不断将这个浮点数乘以10,直到 (int)f 能被 10 整除,那么小数的位数就是乘以 10 的次数 - 1(或者判断整数部分和整个浮点数相等)。

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-06-13
读入字符串,在用一个for循环,如果发现有小数点了,将标志位 = 1,然后,如果发现有数字了,判断标志位是否为1,如果是,即已经到小数点后了,计数器+1,最后输出计数器的值即可
#include <stdio.h>
#include <string.h>

int main(){
int i,flag = 0,wei = 0;
char s[500];
scanf("%s",s); //将浮点数按字符串处理
for(i = 0; i < strlen(s); i++){
if(s[i] == '.') flag = 1;
else if(flag == 1) wei++;
}
printf("%d\n",wei);

return 0;
}
第2个回答  2010-08-02
这个问题的原因应该不是你程序错误的原因,而是存储的原因。如果你将一个整数存成一个浮点数(比如1),在内存里可能是1的小数点后跟了好几个0然后又有一个1。(类似于1.0000001)本回答被提问者采纳
第3个回答  2010-08-03
程序自动添加的,不如把小数(float或者double类型)转化为字符串再判断点后有几位就可。你可以把每次结果打印出来,比如printf("%f",(a*100));等看看,就不会百思了。不要凭空想象。

c语言中关于如何判断一个浮点小数有几位小数的问题
简单的想了下,大概有两种方法:使用 sprintf 等把浮点数转换成字符串的函数,然后统计字符串的位数(感觉怪怪的);不断将这个浮点数乘以10,直到 (int)f 能被 10 整除,那么小数的位数就是乘以 10 的次数 - 1(或者判断整数部分和整个浮点数相等)。

c语言中浮点数的小数部分占几位?
printf("%7.3f",100\/3.0);表示结果占七位,小数部分占3位,这样就可以了,并且小数点后第三位是四舍五入的结果。例如:C语言中浮点数输出精确到两位小数的语句如下:double a=2.0;printf ("%.2f", a);\/\/其中.2指明两位小数 说明:如%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, ...

c语言 求小数的位数
x,y;char s[100];\/\/用字符串存储浮点数 printf("请输入浮点数:"); gets(s);y=strlen(s);for(i=0;i<100;i++){if(s[i]=='.')x=(i+1);}y-=x;printf("%d\\n",y);return 0;} 看来还是没明白你的意思,呵呵

C语言 如何确定输入的float型的小数点位数
简单办法是用字符串方法读入,直接判断字符串。float i;char str[32];int j,L;scanf("%s",str);sscanf(str,"%f",&i);L = strlen(str);然后查找小数点,for (j=0;j<L;j++) if (str[j]=='.') { 有小数点,记录下j的位置 。。。 };然后从最小的一位 str[L-1] 起循环,找...

C语言编程序时怎么控制浮点型输出的小数点精确到几位
使用输出格式说明符来指定精确到小数点位数。如:void main(){ float a=345.234678;printf("%.3f\\n", a) ;} 其中%.3f里的3就表示输出精确到小数点后3位。所以可参考的形式是printf("%m.nf",p);m.nf,指定输出的数据共占m列,其中有n位是小数。如果数值长度小于m,则左端补空格,若数值...

如何用c语言计算小数点后位数(float本身都无法精确)
1、先把浮点数变成字符串,再通过小数点确定小点后面的位数。2、例程:include <stdio.h>#include <string.h>void main() { char * ptr; char strFloat[20]; float number=100.25432; sprintf(strFloat, "%f", number); ptr = strstr(strFloat, "."); if (ptr != ...

在C语言中单精度浮点和双精度浮点小数点后有几位小
小数点后是几位与单精度或双精度无关,输出浮点数时%.xf中的x确定输出多少位小数,如%.12f就把对应的浮点变量值输出12位小数。但是,由于浮点数的长度都是有限的,float的精度是7位左右(包括整数部分),double的精度为16位左右(同样包括整数部分),当x值大到超出对应变量类型的最大表达能力时,后续...

C语言如何判断一个小数的小数点后有几位?
除非是从输入的时候就存成字符串, 然后判断小数点后的位数。一旦存成浮点型变量,不管是double还是float都是近似值,这时就无法准确判断有几位了。

C语言新手求教。求输入一个浮点数,输出这个这数有几位整数几位小数
假设一个整数最多100位吧,for(i = 0;i < 100;i++){ if(m\/10^i <1) break;} 则整数部分位数为i;对于小数部分n,假设一个小数最多100位吧,for(i = 0;i < 100;i++){ if(n*(10^i) >1) break;} 则小数部分位数为i;嗯,应该就这样,打字不容易,跪求采纳 ...

c语言如何判断一个数有多少位小数?
当你命令一个变量,并且对该变量赋值.然后向内存条请求分配内存.C语言默认他是float类型的数据.就是单精度浮点数(实数).然后你输出的数据就是默认小数点后4位..还有个双精度浮点数是double..小数点后8位..希望我的回答能够让你满意..

相似回答