在JAVA中进行double的四则运算时,结果不一定正确
对于需要精确结果的java程序,可以采用java.math.BigDecimal来实现
例如加法运算:
注意:此处构造BigDecimal时必须用字符串形式,否则同样达不到精确效果
double
a
=
0.05
;
double b = 0.01 ;
System.out.println(a + b); // 输出0.060000000000000005
double b = 0.01 ;
System.out.println(a + b); // 输出0.060000000000000005
double
a
=
1.0
;
double b = 0.42 ;
System.out.println(a - b); // 0.5800000000000001
double b = 0.42 ;
System.out.println(a - b); // 0.5800000000000001
double
a
=
100
;
double b = 4.015 ;
System.out.println(a * b); // 401.49999999999994
double b = 4.015 ;
System.out.println(a * b); // 401.49999999999994
double
a
=
123.3
;
double b = 100 ;
System.out.println(a / b); // 输出1.2329999999999999
double b = 100 ;
System.out.println(a / b); // 输出1.2329999999999999
double
a
=
123.4
;
double b = 100 ;System.out.println(a / b); // 输出1.234
double b = 100 ;System.out.println(a / b); // 输出1.234
对于需要精确结果的java程序,可以采用java.math.BigDecimal来实现
例如加法运算:
public
static
double
add(
double
v1,
double
v2)
...
{
BigDecimalb1=newBigDecimal(Double.toString(v1));
BigDecimalb2=newBigDecimal(Double.toString(v2));
returnb1.add(b2).doubleValue();
}
BigDecimalb1=newBigDecimal(Double.toString(v1));
BigDecimalb2=newBigDecimal(Double.toString(v2));
returnb1.add(b2).doubleValue();
}
public
static
double
minus(
double
v1,
double
v2)
...
{
BigDecimalb1=newBigDecimal(v1);
BigDecimalb2=newBigDecimal(v2);
returnb1.subtract(b2).doubleValue();
}
BigDecimalb1=newBigDecimal(v1);
BigDecimalb2=newBigDecimal(v2);
returnb1.subtract(b2).doubleValue();
}
double
a
=
1
;
double b = 0.42 ;
System.out.println(minus(a,b)); // 0.5800000000000001
double b = 0.42 ;
System.out.println(minus(a,b)); // 0.5800000000000001