import
java.math.BigDecimal;
/**
*
处理钱的类
*
*
@author zz
*
*/
public
class
MoneyUtils {
/**
*
默认的精确度
*/
private
static
final
int
DEF_DIV_SCALE =
2
;
/**
*
该类不能被实例化
*/
private
MoneyUtils() {
}
/**
*
钱的加法
*
*
@author zz
*/
public
static
final
float
add(
float
v1,
float
v2) {
BigDecimal
b1 =
new
BigDecimal(v1);
BigDecimal
b2 =
new
BigDecimal(v2);
return
b1.add(b2).floatValue();
}
/**
*
钱的减法
*
*
@param v1
*
被减数
*
@param v2
*
减数
*
@author zz
*/
public
static
final
float
sub(
float
v1,
float
v2) {
BigDecimal
b1 =
new
BigDecimal(v1);
BigDecimal
b2 =
new
BigDecimal(v2);
return
b1.subtract(b2).floatValue();
}
/**
*
钱的乘法
*
@param scala 保留几位小数
*
@author zz
*/
public
static
final
float
mul(
float
v1,
float
v2,
int
scala) {
BigDecimal
b1 =
new
BigDecimal(v1);
BigDecimal
b2 =
new
BigDecimal(v2);
return
round(b1.multiply(b2).floatValue(),scala);
}
/**
*
钱的乘法 保留两位小数
*
@author zz
*/
public
static
final
float
mul(
float
v1,
float
v2) {
BigDecimal
b1 =
new
BigDecimal(v1);
BigDecimal
b2 =
new
BigDecimal(v2);
return
round(b1.multiply(b2).floatValue(),DEF_DIV_SCALE);
}
/**
*
钱的除法(四舍五入)
*
*
@param v1
*
被除数
*
@parama v2 除数
*
@param scala
*
表示表示需要精确到小数点以后几位。
*
@author zz
*/
public
static
final
float
div(
float
v1,
float
v2,
int
scala) {
BigDecimal
b1 =
new
BigDecimal(v1);
BigDecimal
b2 =
new
BigDecimal(v2);
return
b1.divide(b2,scala,BigDecimal.ROUND_HALF_UP).floatValue();
}
/**
*
钱的除法(四舍五入) 默认保留两位小数
*
@author zz
*/
public
static
final
float
div(
float
v1,
float
v2) {
BigDecimal
b1 =
new
BigDecimal(v1);
BigDecimal
b2 =
new
BigDecimal(v2);
return
b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).floatValue();
}
/**
*
提供精确的小数位四舍五入处理。
*
*
@param v
*
需要四舍五入的数字
*
@param scale
*
小数点后保留几位
*
@return 四舍五入后的结果
*/
public
static
float
round(
float
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).floatValue();
}
}