java对于价格的计算

//乘
 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处理,可以截尾

         * 在需要精确答案的地方,要避免使用floatdouble;对于货币计算,使用int,longBigDecimal会更好.

         */

        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 12.0  11.0  10.5  10.2  10.1  10.05  20.02  

关于使用BigDecimal类来进行计算的时候,主要分为以下步骤:

          1、用float或者double变量构建BigDecimal对象。

 

         2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。

 

         3、把BigDecimal对象通过相应xxxValue()方法的转换成floatdoubleint等类型。

 

       创建BigDecimal实例可以使用BigDecimal的构造方法或者静态方法的valueOf()方法把基本类型的变量构建成BigDecimal对象。

对于加减乘除算术运算提供了工具方法

public BigDecimaladd(BigDecimal value);         //加法

2 public BigDecimalsubtract(BigDecimal value);  //减法                 

3 public BigDecimalmultiply(BigDecimal value);    //乘法              

4 public BigDecimaldivide(BigDecimal value);      //除法   

 

猜你喜欢

转载自blog.csdn.net/qq_35298784/article/details/79081212