Believe youself!
分类: C/C++
2013-08-14 16:00:18
(1)浮点数的表示是不精确的,不能直接比较两个数是否完全相等,一般都是在允许的某个范围内认为像个浮点数相等。
float 类型不能比较相等或不等,但可以比较>,<,>=,<=
如有两个浮点数a,b,允许的误差范 围为1e-6,则abs(a-b)<=1e-6,即可认为a和b相等。
用==从语法上说没错,但是本来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用==就会认为它们不等。应该使用两个浮点数之间的差异的绝对值小于某个可以接受的值来判断判断它们是否相等,比如用
if (fabs(price - p) < 0.000001)
来代替
if (price == p)
同意楼上的,很多工程的应用都是采用计算精确度的方式。
定义一个精度,用差的绝对值比较,在精度范围内就认为是相等的;大小可以直接比较。
还有一种方法就是扩大再取整,比如a=5.23,b=5.23,直接比较 a==b一般为false,但是a和b都扩大一百倍,然后强制转换为int类型,再用==比较就可以了.
(2)float型变量和“零值”比较的方法: