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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 如何确定输入的float型的小数点位数相关的知识,希望对你有一定的参考价值。

RT#include<stdio.h>void main()float i;scanf("%f",&i);---------------------------------------我的输入是 2.22 用什么办法确定我输入的float型的小数点位数??

输入后,十进制数变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')....
算出位数。
参考技术A 楼上说的很对,要是你明白小数的二进制存储方式,你就知道了,只是近似存储,除非是0.5,0.25,0.75等这些2的n次方分之几的数是精确存储为,其他的都是近似存储的
要想精确存储,只能用字符串
参考技术B 确定输入的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 )函数转换。

C语言四舍五入保留两位小数

#include
main()

double
a;
printf("请输入一个四位小数:\n");
scanf("%lf",&a);//双精度应该是的%lf
a*=100;//
扩大100倍,举个例子:a=123.4567,a=a*100,则a=12345.67
a+=0.5;//加0.5进行四舍五入a=12346.17
a=(int)a;//这个地方是想保留两位小数,后边的舍去,所以进行强制类型转换.
a/=100;//上面扩大100倍,现在要对其缩小100
printf("结果是:%f\n",a);//这样就行了,或者printf("结果是:%.2f\n",a);
参考技术A 应该是精度问题。
因你使用的是float变量,你可以用printf显示a*100的结果是155.499995而不是155.50000
你可以全改成double型
#include
<stdio.h>
double
fun
(
double
h
)

return
(long)(
h
*
100
+0.5
)/
100.0;

main(
)

double
a;

printf
("enter
a:
");
scanf
(
"%lf",
&a
);

printf
(
"the
original
data
is
:
"
);

printf
(
"%lf
%lf\n\n",
a,
a*100
);

printf
(
"the
result
:
%lf\n",
fun
(
a
)
);

参考技术B scanf("%d",&a);改为:
scanf("%lf",&a);
printf("结果是:%2f\n",a);改为:
printf("结果是:%.2f\n",a);
%2f
是按2位输出,%.2f是按小数部分保留两位输出,一失足成千古恨啊。小心呀
参考技术C 这样相当于取整,a*=1000;a+=5;a/=10;a/=100.0;这样就可以了!
设a为1.256,由a*=1000;得a=1256;由a+=5;得a=1231;由a/=10;得a=123;由a/=100.0;得a=1.230000;后面的不变。

以上是关于C语言 如何确定输入的float型的小数点位数的主要内容,如果未能解决你的问题,请参考以下文章

c语言 求小数的位数

c语言中float型的精度问题

c语言中如何保存一个位数不限的小数?

C语言中如何保留一位小数点?

c语言如何控制小数位数

c语言中啥是单精度型和双精度型???各举个例子。。。