public class BigDecimalUtil {

    private static int DEF_DIV_SCALE = 10; // 默认精确的小数位

    /**
* 提供精确的加法运算。
*
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
public static double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
} /**
* 提供精确的减法运算。
*
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
} /**
* 提供精确的乘法运算。
*
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
} /**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
*
* @param v1 被除数
* @param v2 除数
* @return 两个参数的商
*/
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
} /**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
*
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1, double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_EVEN).doubleValue();
} /**
* 提供精确的小数位四舍五入处理。
*
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_EVEN).doubleValue();
}
/**
* 提供精确的小数位处理,去掉保留位数后的数字
*
* @param v 需要处理的数字
* @param scale 小数点后保留几位
* @return 去掉保留位数后的结果
*/
public static double decimal(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_EVEN).doubleValue();
}
}
  

最新文章

  1. 利用BI搭建零售业数据信息平台
  2. [2015.02.02]文本编码转换专家 v2.6
  3. 分页实体类:PageBean
  4. git :设置 object-c 的忽略文件
  5. matlab学习笔记(一)单元数组
  6. oracle中创建表时添加注释
  7. (转)\r \r\n \t 的区别
  8. 【极客学院出品】Cocos2d-X系列课程之九-BOX2D物理引擎
  9. WebPart设置杂项
  10. 判断字符串是否为UTF8编码
  11. C#抽象类与接口的区别
  12. hdu 5975---Aninteresting game(树状数组)
  13. 一个比Spring Boot快44倍的Java框架!
  14. mysql正则表达式无法识别\d
  15. [2019BUAA软工助教]答黄杉同学
  16. idea 修改单个项目的 默认编码格式
  17. Android 视频 教程 源码 电子书 网址
  18. jq ‘’操作‘’伪元素
  19. U盘或者移动银盘退出时一直显示占用中问题解决--最粗暴解决方式
  20. python中的文本操作

热门文章

  1. spring的AOP个人理解和使用
  2. hdu5542 The Battle of Chibi【树状数组】【离散化】
  3. 全面解析Oracle等待事件的分类、发现及优化
  4. collectionView itemW宽度计算不对
  5. python re.sub 括号匹配替换匹配到的内容后接数字
  6. python 定义类 学习2
  7. 模仿Masonary写一个计算器
  8. Spark Shuffle调优原理和最佳实践
  9. [LeetCode] 83. Remove Duplicates from Sorted List_Easy tag: Linked List
  10. 禁止或强制使用堆分配---《C++必知必会》 条款34