开发金额处理BigDecimal

 

对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作

 

JDK的描述:

 1.参数类型为double的构造方法的结果有一定的不可预知性。

  示例程序

  BigDecimal是Java中用来表示任意精确浮点数运算的类,在BigDecimal中,使用unscaledValue × 10-scale来表示一个浮点数。其中,unscaledValue是一个BigInteger,scale是一个int。从这个表示方法来看,BigDecimal只能标识有限小数,不过可以表示的数据范围远远大于double,在实际应用中基本足够了。

0.1 2.在做金额的转换时,我们可以考虑将double类型的数据,转换成String ,然后通过

   BigDecimal 的计算

   所以我们可以这样书写:

           Double doub1=23.23;

            System.out.println(new BigDecimal(doub1));

            System.out.println(new BigDecimal(doub1.toString()));

 

   23.230000000000000426325641456060111522674560546875//Double

   23.23//String

   可以看出经过String转换在进行BigDecimal的运算是不影响的 .

   BigDecimal 常被用来处理金额上的问题,double 和float 只是简易的浮点数据类型

 

 3.如果原数据是double类型,每一个都进行类型转换的话,太过麻烦,我们可以书写一个util

   进行转换.

 

序号

方    法

类型

描    述

1

public BigDecimal(double val)

构造

将double表示形式转换

为BigDecimal

2

public BigDecimal(int val)

构造

将int表示形式转换为

BigDecimal

3

public BigDecimal(String val)

构造

将字符串表示

形式转换为BigDecimal

4

public BigDecimal add(BigDecimal augend)

普通

加法

5

public BigDecimal subtract(BigDecimal
subtrahend)

普通

减法

6

public BigDecimal multiply(BigDecimal
multiplicand)

普通

乘法

7

public BigDecimal divide(BigDecimal
divisor)

普通

除法

范例:进行四舍五入的四则运算

package org.lxh.demo11.numberdemo;

    import java.math.BigDecimal;

    class MyMath {

        public static double add(double d1, double d2)

    {        // 进行加法运算

             BigDecimal b1 = new BigDecimal(d1);

             BigDecimal b2 = new BigDecimal(d2);

            return b1.add(b2).doubleValue();

         }

        public static double sub(double d1, double d2)

    {        // 进行减法运算

             BigDecimal b1 = new BigDecimal(d1);

             BigDecimal b2 = new BigDecimal(d2);

            return b1.subtract(b2).doubleValue();

         }

        public static double mul(double d1, double d2)

    {        // 进行乘法运算

             BigDecimal b1 = new BigDecimal(d1);

             BigDecimal b2 = new BigDecimal(d2);

            return b1.multiply(b2).doubleValue();

         }

        public static double div(double d1,

    double d2,int len) {// 进行除法运算

             BigDecimal b1 = new BigDecimal(d1);

             BigDecimal b2 = new BigDecimal(d2);

            return b1.divide(b2,len,BigDecimal.

    ROUND_HALF_UP).doubleValue();

         }

        public static double round(double d,

    int len) {     // 进行四舍五入

    操作

             BigDecimal b1 = new BigDecimal(d);

             BigDecimal b2 = new BigDecimal(1);

            // 任何一个数字除以1都是原数字

            // ROUND_HALF_UP是BigDecimal的一个常量,

    表示进行四舍五入的操作

            return b1.divide(b2, len,BigDecimal.

    ROUND_HALF_UP).doubleValue();

         }

    }

    public class BigDecimalDemo01 {

        public static void main(String[] args) {

             System.out.println("加法运算:" +

    MyMath.round(MyMath.add(10.345,

    3.333), 1));

             System.out.println("乘法运算:" +

    MyMath.round(MyMath.mul(10.345,

    3.333), 3));

             System.out.println("除法运算:" +

    MyMath.div(10.345, 3.333, 3));

             System.out.println("减法运算:" +

    MyMath.round(MyMath.sub(10.345,

    3.333), 3));

         }

    }

摘自:http://www.cnblogs.com/mingforyou/p/3344489.html

posted @ 2016-05-26 10:17  天上谪仙人  阅读(815)  评论(0编辑  收藏  举报