注意;float雖然是4個自減,但是它的取值范圍卻比8個字節的long要大。
float和double只能用來作科學計算或者是工程計算,但在商業計算中我們要用java.math.BigDecimal,通過使用BigDecimal類可以解決上述問題,實例代碼如下:
package
ex;
import
java.math.*;
public
class
BigDecimalDemo {
public
static
void
main(String[] args){
System.out.println(ArithUtil.add(
0.01
,
0.05
));
System.out.println(ArithUtil.sub(
1.0
,
0.42
));
System.out.println(ArithUtil.mul(
4.015
,
100
));
System.out.println(ArithUtil.div(
123.3
,
100
));
}
}
class
ArithUtil{
private
static
final
int
DEF_DIV_SCALE=
10
;
private
ArithUtil(){}
//相加
public
static
double
add(
double
d1,
double
d2){
BigDecimal b1=
new
BigDecimal(Double.toString(d1));
BigDecimal b2=
new
BigDecimal(Double.toString(d2));
return
b1.add(b2).doubleValue();
}
//相減
public
static
double
sub(
double
d1,
double
d2){
BigDecimal b1=
new
BigDecimal(Double.toString(d1));
BigDecimal b2=
new
BigDecimal(Double.toString(d2));
return
b1.subtract(b2).doubleValue();
}
//相乘
public
static
double
mul(
double
d1,
double
d2){
BigDecimal b1=
new
BigDecimal(Double.toString(d1));
BigDecimal b2=
new
BigDecimal(Double.toString(d2));
return
b1.multiply(b2).doubleValue();
}
//相除
public
static
double
div(
double
d1,
double
d2){
return
div(d1,d2,DEF_DIV_SCALE);
}
public
static
double
div(
double
d1,
double
d2,
int
scale){
if
(scale<
0
){
throw
new
IllegalArgumentException(
"The scale must be a positive integer or zero"
);
}
BigDecimal b1=
new
BigDecimal(Double.toString(d1));
BigDecimal b2=
new
BigDecimal(Double.toString(d2));
return
b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}