java中浮点数的比较

首先来看两个简单的例子:

例一:

float f = 0.1f;
double d = 0.1;
System.out.println(f==d);

结果为:false

 

例二:

float n = 131213112f;
float m = n+1;
System.out.println(n==m);

结果为:true

 

float和double类型主要是为了科学计算和工程计算而设计的。它们执行二进制浮点运算,这是为了在广泛的数字范围上提供较为精确的快速近似计算而精心设计的。然而,它们并没有提供完全精确的结果。因此,我们不应该应用于精确计算的场合。例如银行业务等。

 

可以使用BigDecimal类型进行加减乘除运算

Java BigDecimal类型的 加减乘除运算不能基本数据类型一样样,需要调用方法:

加法:add

减法:subtract

乘法:multiply

除法:divide

但能实现非常精准的结果。

例如:

BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.1");
BigDecimal s = null;
s = a.subtract(b);
System.out.println("a-b="+s);

结果为:a-b=0.0