注意;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();
}
}