//乘
public double getMultiply(double x,double y){
BigDecimal x1 = new BigDecimal(Double.valueOf(x));
BigDecimal y1 = new BigDecimal(Double.valueOf(y));
return x1.multiply(y1).doubleValue();
}
//除
public double getDivide(double x,double y){
BigDecimal x1 = new BigDecimal(Double.valueOf(x));
BigDecimal y1 = new BigDecimal(Double.valueOf(y));
return x1.divide(y1,3,BigDecimal.ROUND_HALF_UP).doubleValue();
}
例子:
/**
* 根据应收金额 dcost, 和dCash实收现金计算找零多少
* @param dCash
* 现金
* @param dCost
* 金额
*/
public static void printChange( doubledCash , double dCost ) {
if (dCash < 0 || dCost < 0 ||dCash < dCost) {
return;
}
DecimalFormat format = newDecimalFormat("0.00");
//System.out.println(format.format(dCash));
//System.out.println(format.format(dCost));//用于对double类型数据的数据小数点后几位指定
/*
* 对于金额使用BigDecimal处理,可以截尾
* 在需要精确答案的地方,要避免使用float和double;对于货币计算,使用int,long或BigDecimal会更好.
*/
BigDecimal bigDecimal = newBigDecimal(format.format(dCash));
BigDecimal decimal = bigDecimal
.subtract(newBigDecimal(format
.format(dCost)));//需要找的钱
//System.out.println(decimal.doubleValue());
double charges[] = { 100, 50, 20, 10,5, 2, 1, 0.5, 0.2, 0.1, 0.05,
0.02, 0.01 };
double money = decimal.doubleValue();//获取找零的金额,
// System.out.println(money);
int chargesNum[] = newint[charges.length];
for (int i = 0; i < charges.length;i++)
chargesNum[i] = 0;// 记录每一个面额的纸币有多少长
int i = 0;
while (money > 0) {
while (charges[i] > money)
i++;
money -= charges[i];
money =Double.valueOf(format.format(money)).doubleValue();// 对减去一个浮点型数字后进行小数点格式化,格式化带两个小数点的实数。
System.out.println(money);
chargesNum[i] += 1;
}
// 把找零的数字输出
System.out.print("找零金额:" + decimal.doubleValue() +" :");
for (int j = 0; j <chargesNum.length; j++) {
if (chargesNum[j] > 0) {
if (j < 7) {
System.out.print(chargesNum[j] + "张" + charges[j] + "元 ");
} else if (j < 10) {
System.out.print(chargesNum[j] + "张" + charges[j] + "角 ");
} else {
System.out.print(chargesNum[j] + "张" + charges[j] + "分 ");
}
}
}
}
测试:printChange(5,1.11);
输出结果:
1.89
0.89
0.39
0.19
0.09
0.04
0.02
0.0
找零金额:3.89 :1张2.0元 1张1.0元 1张0.5角 1张0.2角 1张0.1角 1张0.05分 2张0.02分
关于使用BigDecimal类来进行计算的时候,主要分为以下步骤:
1、用float或者double变量构建BigDecimal对象。
2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。
3、把BigDecimal对象通过相应xxxValue()方法的转换成float,double,int等类型。
创建BigDecimal实例可以使用BigDecimal的构造方法或者静态方法的valueOf()方法把基本类型的变量构建成BigDecimal对象。
对于加减乘除算术运算提供了工具方法
public BigDecimaladd(BigDecimal value); //加法
2 public BigDecimalsubtract(BigDecimal value); //减法
3 public BigDecimalmultiply(BigDecimal value); //乘法
4 public BigDecimaldivide(BigDecimal value); //除法