1.比较大小
float 和double 类型不能直接比较相等或不等,但可以比较>,<,>=,<=
2.比较是否相等
用==从语法上说没错,但是本来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用==就会认为它们不等。应该使用两个浮点数之间的差异的绝对值小于某个可以接受的值来判断判断它们是否相等,比如用。
if (fabs(price - p) < 0.000001)
来代替
if (price == p)
定义一个精度,用差的绝对值比较,在精度范围内就认为是相等的;大小可以直接比较
C++ 版本实现如下:
#include <math>
#define EPSILON 1e-6
int main(void)
{
float a = 0.000003;
float b = 0.000005;
printf("a=%f/n",a);
printf("b=%f/n",b);
printf("abs(a-b)=%f/n",abs(a-b));
printf("fabs(a-b)=%f/n",fabs(a-b));
if ( fabs(a-b) <= EPSILON ) //判断浮点数是否相等
{
printf("a==b/n");
}else
{
printf("a!=b/n");
}
if ( fabs(a) <= EPSILON) //判断浮点数是否等于0
{
printf("a==0/n");
}else
{
printf("a!=0/n");
}
if (a > b) //比较两个浮点数的大小,
{
printf("a>b/n");
}else
{
printf("a<b/n");
}
return 0;
}
java 版本实现如下:
public static void main(String[] args) {
float DEFAULT_DELTA = 0.00000001f;
float a = 0.22222225f;
float b = 0.22222229f;
if (a == b) {
System.out.println("相等 a和b");
}
if (Math.abs(a - b) >= DEFAULT_DELTA) {
System.out.println("不相等 a和b");
} else {
System.out.println("相等 a和b");
}
}