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

我在编写C程序时遇到一个需要判断一个浮点小数有几位小数的问题,于是我便想到用if((n*10)==(int)(n*10))来判断n是否是一位小数,同样用if((n*100... 我在编写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”。我运行了好几遍都是这样,搞的我头都大了。在此我 想请教各位高手这是怎么一回事,能否提供更好的判断有几位小数的方法, 在下不胜感激。我很着急!!! 展开
 我来答
若惜_rx
2016-06-06 · 超过27用户采纳过TA的回答
知道答主
回答量:49
采纳率:70%
帮助的人:35万
展开全部

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

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

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

fly飞天999
2016-06-13 · TA获得超过105个赞
知道答主
回答量:48
采纳率:100%
帮助的人:28.1万
展开全部
读入字符串,在用一个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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_lonely_soul
2010-08-02 · TA获得超过128个赞
知道答主
回答量:21
采纳率:0%
帮助的人:24.6万
展开全部
这个问题的原因应该不是你程序错误的原因,而是存储的原因。如果你将一个整数存成一个浮点数(比如1),在内存里可能是1的小数点后跟了好几个0然后又有一个1。(类似于1.0000001)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
明哥秀
2010-08-03 · TA获得超过143个赞
知道答主
回答量:98
采纳率:0%
帮助的人:65.8万
展开全部
程序自动添加的,不如把小数(float或者double类型)转化为字符串再判断点后有几位就可。你可以把每次结果打印出来,比如printf("%f",(a*100));等看看,就不会百思了。不要凭空想象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式