C语言 如何确定输入的float型的小数点位数

RT#include<stdio.h>voidmain(){floati;scanf("%f",&i);}----------------------... RT#include<stdio.h>void main(){float i;scanf("%f",&i);}---------------------------------------我的输入是 2.22 用什么办法确定我输入的float型的小数点位数?? 展开
 我来答
L_o_o_n_i_e
推荐于2018-06-13 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:4868万
展开全部
输入后,十进制数变2进制。十进制小数 化 2进制小数 常常 化不尽,所以用 大于小于来判断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] 起循环,找到第一个不是 0 的位置。 if (str[k] !='0'){....}
算出位数。
淦海瑶s1
2011-11-24 · TA获得超过3646个赞
知道大有可为答主
回答量:3341
采纳率:100%
帮助的人:697万
展开全部
楼上说的很对,要是你明白小数的二进制存储方式,你就知道了,只是近似存储,除非是0.5,0.25,0.75等这些2的n次方分之几的数是精确存储为,其他的都是近似存储的
要想精确存储,只能用字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zyl0462
推荐于2017-09-12 · TA获得超过1082个赞
知道小有建树答主
回答量:433
采纳率:75%
帮助的人:315万
展开全部
确定输入的float型的小数点位数,可以通过sprintf函数实现数字转字符串,处理字符串,判断小数点“.”后的位数实现,但由于系统中float存在7位有效数字(含小数点,即小数点后有6位小数),使得系统或者补0,或者截断,导致统计与实际输入数字的位数不符。
//主要代码
char buffer[40];
float fnum=12.38;
sprintf(buffer,"%f",fnum);//获得字符串
int i=0,num=0;
for(;*(buffer+i)!='\0';i++)
{
if(*(buffer+i)=='.')
num=0;//小数点后开始计数
else
num++;//统计小数点后数字位数
}

float 为单精度浮点型数据,在Turbo
C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。建议输入采用字符串形式,这样统计不会出偏差,使用数字时,使用double atof( const char *str )函数转换。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式