一个关于float数的有关问题,请
一个关于float数的问题,请高手指点
int main(void)
{
float f_;
printf("Enter a float number: \n");
scanf("%f",&f_);
printf("The input is %.6f or %.6e.",f_,f_);
return 0 ;
}
为什么输入21.29结果是21.290001
而如果输入的时2.29结果是2.29000
如果是12.29也是12.29000
------解决方案--------------------
小数本来也不精确
------解决方案--------------------
float 的精度比较低,你要求的输出太精确了,所以有出入。
可以选择降低输出位数,或者换成double
------解决方案--------------------
是因为浮点数的特殊的存储方式决定的
------解决方案--------------------
你打错了吧,小数点后的位数应该是确定的啊。
------解决方案--------------------
浮点数有精度限制的,帮你找到了一篇文章,你可以参考一下
http://www.cnblogs.com/bossin/archive/2007/04/08/704567.html
------解决方案--------------------
float是单精度实数,其精确度不高,可能会存在浮点误差。
建议你换成double或者long double.
------解决方案--------------------
对于浮点数,有自己独特的存储方式,由于计算机中只能表示0,1,那么对于1/3,非2的幂次(如2的-1,-2幂)之类小数数据计算机是无法精确表示的,一般都会有舍入或舍出的
------解决方案--------------------
lz 没有在书上看到过“在计算机中,只有整型数据是精确的”
------解决方案--------------------
float类型在即算计中存储是按IEEE754标准存储的。
因为float是32位存储的
其中第一位是符号位
1代表负 0代表正 紧接着是8位的阶码 后面23位是尾数位。
具体的可以到网上查查
------解决方案--------------------
float 的精度比较低,你要求的输出太精确了,所以有出入。
可以选择降低输出位数,或者换成double
------解决方案--------------------
如 6 楼所说, LZ 可以 :
double f_;
然后 scanf("%lf", &f_);
printf() 内不变.
就可以得出你想要的结果了.
------解决方案--------------------
数字在计算机中都是以二进制存储的,转换的时候可能会出现误差
个人理解
------解决方案--------------------
printf("The input is %g\n",f_);
int main(void)
{
float f_;
printf("Enter a float number: \n");
scanf("%f",&f_);
printf("The input is %.6f or %.6e.",f_,f_);
return 0 ;
}
为什么输入21.29结果是21.290001
而如果输入的时2.29结果是2.29000
如果是12.29也是12.29000
------解决方案--------------------
小数本来也不精确
------解决方案--------------------
float 的精度比较低,你要求的输出太精确了,所以有出入。
可以选择降低输出位数,或者换成double
------解决方案--------------------
是因为浮点数的特殊的存储方式决定的
------解决方案--------------------
你打错了吧,小数点后的位数应该是确定的啊。
------解决方案--------------------
浮点数有精度限制的,帮你找到了一篇文章,你可以参考一下
http://www.cnblogs.com/bossin/archive/2007/04/08/704567.html
------解决方案--------------------
float是单精度实数,其精确度不高,可能会存在浮点误差。
建议你换成double或者long double.
------解决方案--------------------
对于浮点数,有自己独特的存储方式,由于计算机中只能表示0,1,那么对于1/3,非2的幂次(如2的-1,-2幂)之类小数数据计算机是无法精确表示的,一般都会有舍入或舍出的
------解决方案--------------------
lz 没有在书上看到过“在计算机中,只有整型数据是精确的”
------解决方案--------------------
float类型在即算计中存储是按IEEE754标准存储的。
因为float是32位存储的
其中第一位是符号位
1代表负 0代表正 紧接着是8位的阶码 后面23位是尾数位。
具体的可以到网上查查
------解决方案--------------------
float 的精度比较低,你要求的输出太精确了,所以有出入。
可以选择降低输出位数,或者换成double
------解决方案--------------------
如 6 楼所说, LZ 可以 :
double f_;
然后 scanf("%lf", &f_);
printf() 内不变.
就可以得出你想要的结果了.
------解决方案--------------------
数字在计算机中都是以二进制存储的,转换的时候可能会出现误差
个人理解
------解决方案--------------------
printf("The input is %g\n",f_);