BigDecimal可以解决Double精度问题:
比如:Double result=(int)Math.floor(70.0)*0.01;//打印结果是:0.7000000000000001 ,而正确的结果是:0.7
解决办法:底层用java.math.BigDecimal计算,返回类型用double类型
注解:
在《Effective
Java
》中提到一个原则,那就是float和double只能用来作科学计算或者是工程计算,但在商业计算中我们要用java.math.BigDecimal,通过使用BigDecimal类我们可以解决上述问题
解决之后的代码:
/**
*
功能:日均超过六小时行驶次数,计算公式:
floor(over_6h_driving/
statdays
*100)*0.01
*
@Title
: getOver6hcntPerday
*
@Description
:
日均超过六小时行驶次数
*
@param
@param
v1
*
@param
@param
v2
*
@param
@param
dr
*
@param
@return
参数
*
@return
int
返回类型
*
*/
public
static
Double getOver6hcntPerday(Object
v1
,Object
v2
,
double
dr
){
Double
d1
=
null
;
Double
d2
=
null
;
if
(
v1
!=
null
&&
v2
!=
null
){
d1
=Double.
valueOf
(
v1
.toString());
d2
=Double.
valueOf
(
v2
.toString());
}
Double
tmp
=ArithUtil.
mul
(ArithUtil.
div
(
d1
,
d2
), 100) ;
......
阅读全文