注册 登录
编程论坛 新人交流区

C的比较菜的问题。。

man420323 发布于 2007-10-01 01:11, 852 次点击
#include<stdio.h>
void main()
{
float a[3],min;
int i;
for(i=0;i<=2;i++)
scanf("%f",&a[i]);
min=a[0]<a[1]?a[0]:a[1];
min=min<a[2]?min:a[2];
printf("%f",min);
}
这段代码是输入三个数,输出最小的数,但是输入三个树分别是22.22,22.33,22.44的时候,输出却是22.219999,请问这个是为什么?
20 回复
#2
缘吇弹2007-10-01 01:24
精度
#3
feitianx12007-10-01 01:32
浮点数小数点后的有效位数是6
#4
悠悠水儿2007-10-01 08:19

支持2楼的

#5
oldtiebccn2007-10-01 09:21
...............
#6
justing9122007-10-01 11:05
因为你定义数组是用的float类型,所以输出的就浮点型的,小数精确到6位.
#7
he52202007-10-01 12:18
浮点型精确到小数点后6位,可以换double  或者long试下~~~~~
#8
woshiming662007-10-01 13:01
那为什么不是22.220000呢?
#9
chowchow6162007-10-01 17:14
这是个float类型的数据。精读导致的。

[此贴子已经被作者于2007-10-1 17:15:04编辑过]


#10
追寻完美2007-10-01 18:12
呵呵```````结果是不可预知的``````````
变量类型要正确运用
#11
suwenyi2007-10-01 18:13
这个错误是由于电脑对单精度数据的处理造成的,建议用double
#12
好笨的虫子2007-10-01 19:05
是啊,不同操作系统上是不同的结果,而且也和内存分配有关,很多方面的,数位太长了,在堆栈中会被截位.所以要考虚好所使用的数据,注意这些细节问题
#13
liangchongch2007-10-01 19:54
浮点数的精度问题 最后一句改成
printf("%.2f",min);
#14
beyondjoe2007-10-01 20:04
受教了~~
#15
man4203232007-10-02 00:00

是精度问题吗?输入22.220000 33.330000 44.440000 输出的还是22.219999,这真让人郁闷

#16
furbywu2007-10-02 01:02
应该是22.220000吧
#17
ayoyo2007-10-02 01:44
#include <iostream.h>
void main()
{
float a[3],min;
int i;
for(i=0;i<=2;i++)
cin >> a[i];
cout << endl;
min=a[0]<a[1]?a[0]:a[1];
min=min<a[2]?min:a[2];
cout << min << endl;
}
用C++的标准输入输出就不会有这种问题;
不过也存在一点:当你输入22.220000,22.33333,22.4444时,
系统会自动给你抹掉22.2200000后面的0,输出结果为22.22;
也是精度问题,如果不用C的标准输出,怎解??
#18
lflwill2007-10-02 09:07
#19
心跳的感觉2007-10-02 13:08
以下是引用justing912在2007-10-1 11:05:43的发言:
因为你定义数组是用的float类型,所以输出的就浮点型的,小数精确到6位.

同意..

#20
yiyue_zf2007-10-02 15:48

支持2楼

#21
man4203232007-10-02 17:17

虽然跟精度有关,但是谁能更通俗地讲讲为什么会这样呢?就是把22.220000变成22.1999999呢/?

1