BigDecimal类

来源:互联网 发布:怎么获取淘宝客pid 编辑:程序博客网 时间:2024/04/28 02:31

import java.math.BigDecimal;

/**
 * BigDecimal类表示不可变的、任意精度的有符号十进制数
 * BigDecimal类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换
 * 如果对double符点数进行操作时,一定要使用String对象作为构造函数参数,而不是直接使用double数字;否则会发生精度丢失
 * @author liyongyong
 *
 */

public class TestBigDecimal {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BigDecimal d1 = new BigDecimal("0.05");    //基于字符串
        BigDecimal d2 = new BigDecimal(0.05);    //基于double符点数
        BigDecimal d3 = BigDecimal.valueOf(0.01);
       
        System.err.println("下面使用String作为BigDecimal构造函数参数的计算结果:");
        System.out.println("0.05 + 0.01 = " + d1.add(d3));
        System.out.println("0.05 - 0.01 = " + d1.subtract(d3));
        System.out.println("0.05 * 0.01 = " + d1.multiply(d3));
        System.out.println("0.05 / 0.01 = " + d1.divide(d3));
       
        System.err.println("下面使用Double作为BigDecimal构造函数参数的计算结果:");
        System.out.println("0.05 + 0.01 = " + d2.add(d3));    //发生精度丢失
        System.out.println("0.05 - 0.01 = " + d2.subtract(d3));
        System.out.println("0.05 * 0.01 = " + d2.multiply(d3));
        System.out.println("0.05 / 0.01 = " + d2.divide(d3));
       
        System.err.println("0.05 + 0.01 = " + (0.05 + 0.01));
        System.out.println("0.05 + 0.01 = " + d1.add(d3).doubleValue());
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

import java.math.BigDecimal;

/**
 * Arith工具类,是对double符点数进行加、减、乘、除基本运算。
 * 如果程序中需要对double符点数进行操作,则需要先将double类型数值包装成BigDecimal对象,调用BigDecimal对象
 * 的方法执行运算后转换成double类型,这是比较烦琐的过程,则以BigDecimal为基础定义一个Arith工具
 * @author liyongyong
 *
 */

public class Arith {

    //默认除法运算精度
    private static final int DEF_DIV_SCALE = 10;
   
    private Arith(){}    //不允许创建对象
   
    public static double add(double v1, double v2)
    {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.add(b2).doubleValue();
    }
   
    public static double subtract(double v1, double v2)
    {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.subtract(b2).doubleValue();
    }
   
    public static double multiply(double v1, double v2)
    {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.multiply(b2).doubleValue();
    }
   
    public static double divide(double v1, double v2)
    {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
   
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("0.05 + 0.01 = " + Arith.add(0.05, 0.01));
        System.out.println("1.0  - 0.42 = " + Arith.subtract(1.0, 0.42));
        System.out.println("4.015 * 100 = " + Arith.multiply(4.015, 100));
        System.out.println("123.3 / 100 = " + Arith.divide(123.3, 100));
    }
}

原创粉丝点击