double t1=34.0;
double t2=2.55
System.out.println(t1*t2);
结果不等于 86.7
解决方案 采用 java.math.BigDecimal
此处有一个通用类
-
import
java.math.BigDecimal;
-
-
-
-
-
-
-
-
-
-
public
class
Arith{
-
-
-
-
private
static
final
int
DEF_DIV_SCALE =
10
;
-
-
-
-
private
Arith(){
-
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
public
static
double
add(
double
v1,
double
v2){
-
-
BigDecimal b1 =
new
BigDecimal(Double.toString(v1));
-
-
BigDecimal b2 =
new
BigDecimal(Double.toString(v2));
-
-
return
b1.add(b2).doubleValue();
-
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
public
static
double
sub(
double
v1,
double
v2){
-
-
BigDecimal b1 =
new
BigDecimal(Double.toString(v1));
-
-
BigDecimal b2 =
new
BigDecimal(Double.toString(v2));
-
-
return
b1.subtract(b2).doubleValue();
-
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
public
static
double
mul(
double
v1,
double
v2){
-
-
BigDecimal b1 =
new
BigDecimal(Double.toString(v1));
-
-
BigDecimal b2 =
new
BigDecimal(Double.toString(v2));
-
-
return
b1.multiply(b2).doubleValue();
-
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
public
static
double
div(
double
v1,
double
v2){
-
-
return
div(v1,v2,DEF_DIV_SCALE);
-
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
public
static
double
div(
double
v1,
double
v2,
int
scale){
-
-
if
(scale<
0
){
-
-
throw
new
IllegalArgumentException(
-
-
"The scale must be a positive integer or zero"
);
-
-
}
-
-
BigDecimal b1 =
new
BigDecimal(Double.toString(v1));
-
-
BigDecimal b2 =
new
BigDecimal(Double.toString(v2));
-
-
return
b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
-
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
public
static
double
round(
double
v,
int
scale){
-
-
if
(scale<
0
){
-
-
throw
new
IllegalArgumentException(
-
-
"The scale must be a positive integer or zero"
);
-
-
}
-
-
BigDecimal b =
new
BigDecimal(Double.toString(v));
-
-
BigDecimal one =
new
BigDecimal(
"1"
);
-
-
return
b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
-
-
}
-
-
}