一、为什么要用BigDecimal?

涉及到加减乘除,用int,double 会出现数据丢失,这个时候就要用BigDecimal。

注意:在new BigDecimal(Double.toString(v1),里面要传入String类型,不然不行。

二、用法:

public class BigDecimalUtil {

  // 除法运算默认精度
  private static final int DEF_DIV_SCALE = 10;

  private BigDecimalUtil() {

  }

  /**
  * 精确加法
  */
  public static double add(double value1, double value2) {
    BigDecimal b1 = BigDecimal.valueOf(value1);
    BigDecimal b2 = BigDecimal.valueOf(value2);
    return b1.add(b2).doubleValue();
  }

  /**
  * 精确减法
  */
  public static double sub(double value1, double value2) {
    BigDecimal b1 = BigDecimal.valueOf(value1);
    BigDecimal b2 = BigDecimal.valueOf(value2);
    return b1.subtract(b2).doubleValue();
  }

  /**
  * 精确乘法
  */
  public static double mul(double value1, double value2) {
    BigDecimal b1 = BigDecimal.valueOf(value1);
    BigDecimal b2 = BigDecimal.valueOf(value2);
    return b1.multiply(b2).doubleValue();
  }

  /**
  * 精确除法 使用默认精度
  */
  public static double div(double value1, double value2) throws IllegalAccessException {
    return div(value1, value2, DEF_DIV_SCALE);
  }

  

  /**
  * 精确除法
  *
  * @param scale
  * 精度
  */
  public static double div(double value1, double value2, int scale) throws IllegalAccessException {
    if (scale < 0) {
      throw new IllegalAccessException("精确度不能小于0");
    }
    BigDecimal b1 = BigDecimal.valueOf(value1);
    BigDecimal b2 = BigDecimal.valueOf(value2);
    return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  }

  /**
  * 四舍五入
  *  
  * @param scale
  * 小数点后保留几位
  */
  public static double round(double v, int scale) throws IllegalAccessException {
    return div(v, 1, scale);
  }

}

BigDecimalUtil 工具类的更多相关文章

  1. BigDecimal工具类处理精度计算

    /** * Created by My_coder on 2017-07-27. * 加减乘除计算工具类 */ public class BigDecimalUtil { private BigDec ...

  2. Java的精确整数计算-Bigdecimal学习总结和工具类

    随笔:随着最近工作需要,回首需要涉及到一些精确的数据计算,就需要用到Bigdecimal,索性就趁着闲暇之余整理收集一下关于Bigdecimal的使用方法,由于时间的原因,整理的并不是特别详细,但相信 ...

  3. java 日期工具类

    import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...

  4. 封装关于金额计算的double工具类

    由于直接使用double类型的加减乘除,可能会出现不可预测的问题,精度丢失等等.在业务中,计算金额是一件很重要的事情. 可以直接使用BigDecimal类,进行加减乘除.相关BigDecimal类介绍 ...

  5. java 工具类使用

    BigDecimalUtil 金额计算工具类 import java.math.BigDecimal; public class BigDecimalUtil { private BigDecimal ...

  6. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  7. Android—关于自定义对话框的工具类

    开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...

  8. [转]Java常用工具类集合

    转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...

  9. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

随机推荐

  1. Java代理(三)

    前面说到了java的动态代理,但是动态代理依赖于接口,这次来看看cglib来实现的代理... 假设有如下方法,这回没有说接口哦~ package proxy.cglibProxy; public cl ...

  2. 南阳nyoj 509 因子和阶乘

    因子和阶乘 时间限制:1000 ms  |  内存限制:65535 KB 难度:2  http://acm.nyist.net/JudgeOnline/problem.php?pid=509 描述 给 ...

  3. maven(视频学习)

    一.maven的介绍 二.maven的环境搭建 三.maven的结构 四.maven常用的构建命令 五.maven自动创建目录骨架 六.maven中的坐标和仓库 七.在eclipse中安装maven插 ...

  4. Hibernate(二)持久化对象的状态

    简介 以前学习Hibernate的笔记,整理一下便发出来了,防止弄丢.有错误的话麻烦各位留言评论,感激不尽. 持久化类 Hibernate完成了从面向对象模型表示的对象至关系模型表示的数据结构的映射, ...

  5. Linux学习8-Linux常用命令(4)

    链接命令     命令名称:ln 命令英文原意:link 命令所在路径:/bin/ln 执行权限:所有用户 功能描述:生成链接文件 语法:ln 选项[-s][原文件] [目标文件] 选项: -s 创建 ...

  6. 备忘:CSS术语词汇表——张鑫旭

    一.叨点什么 写文章的时候经常用到一些CSS方面的专业词汇.但是毕竟芳华年少不在,脑袋有点秀逗了,很多名词都记不住,这种感觉比厕所便秘还难受.比如今天居然记不起来公司公认脸蛋最pp的同事的名字,没想到 ...

  7. 倒计时5,4,3,2,1css实现(count down from 5 to 1 using css)

    //count down from 5 to 1, a useful animation. show the code to you:   <!DOCTYPE html> <html ...

  8. swiper h5学习

    http://www.swiper.com.cn/ 较多用于移动端

  9. 更新oracle数据库表如何实现主键自增长

     在数据库中实现主键自动增长有利于我们做数据插入操作,在SQL SERVER上创建表时可以在int类型的字段后加上identity(1,1),该字段就会从1开始,按照+1的方式自增,将这个字段设置 ...

  10. 7 Recursive AutoEncoder结构递归自编码器(tensorflow)不能调用GPU进行计算的问题(非机器配置,而是网络结构的问题)

    一.源代码下载 代码最初来源于Github:https://github.com/vijayvee/Recursive-neural-networks-TensorFlow,代码介绍如下:“This ...