读书人

高分!莫名其妙的精度有关问题

发布时间: 2013-01-11 11:57:35 作者: rapoo

高分!!!莫名其妙的精度问题
三个编辑框控件 一个关联整形变量m_int 一个关联浮点型变量m_float
一个关联乘以10000后的浮点型变量m_float10000
当m_float赋值0.39时
m_float10000=m_float*10000; //输出3900
m_int=m_float*10000; //输出3899
于是想到
m_float10000=m_float*10000;
m_int=m_float10000; //还是输出3899 float
[解决办法]
加 0.5 圆整试一下,m_int=m_float*10000+0.5;
[解决办法]
浮点数存储是丢精度的,所以浮点数比较相等不用==而是判断是否在某个范围内,看下浮点数的存储格式吧。
[解决办法]

引用:
浮点数存储是丢精度的,所以浮点数比较相等不用==而是判断是否在某个范围内,看下浮点数的存储格式吧。

+1

int main()
{
double m_float = 0.39;//float m_float = 0.39;
cout<<"m_float = "<<m_float<<endl;
cout<<"m_float*10000 = "<<m_float*10000<<endl;// m_float*10000 = 3900

int m_int = m_float*10000;
cout<<"m_int = "<<m_int<<endl;//输出m_int = 3900

system("pause");
return 0;
}


double m_float = 0.39;//输出3900
float m_float = 0.39;//输出3899
其实你想下,double的精度更高一些。。。
[解决办法]
#include "iostream"
#include<iomanip>
using namespace std;

int main()
{
float m_float10000,m_float=0.39;
int m_int=m_float*10000;
m_float10000=m_float*10000;//浮点数的计算是有误差的
cout<<m_float10000<<endl;//默认7位有效数字
cout<<setprecision(10)<< m_float10000<<endl;//设置为10位有效数字,可以看出当为7为有效数字时,四舍五入就成了上行的输出:3900
cout<<m_int<<endl;//赋值给整数将直接将小数部分抹去,所以就是3899
return 0;
}
运行结果:
3900
3899.999756
3899
请按任意键继续. . .

读书人网 >C++

热点推荐