数学运算工具(精确运算)

/**
*
* @author maple
*
*/
public abstract class AmountUtil { private AmountUtil() { } /**
* 加法运算
*
* @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();
} /**
*
* 除法运算,当发生除不尽的情况时,精确到小数点以后2位,以后的数字四舍五入
*
* @param v1被除数
* @param v2除数
* @return
*/
public static double div(double v1, double v2) {
return div(v1, v2, 2);
} /**
*
* 除法运算,当发生除不尽的情况时,由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_UP).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_UP).doubleValue();
} /**
* 判断 a 与 b 是否相等
*
* @param a
* @param b
* @return a==b 返回true, a!=b 返回false
*/
public static boolean equal(double a, double b) {
BigDecimal v1 = BigDecimal.valueOf(a);
BigDecimal v2 = BigDecimal.valueOf(b);
if (v1.compareTo(v2) == 0) {
return true;
}
return false;
} /**
* 判断 a 是否大于等于 b
*
* @param a
* @param b
* @return a&gt;=b 返回true, a&lt;b 返回false
*/
public static boolean greaterThanOrEqualTo(double a, double b) {
BigDecimal v1 = BigDecimal.valueOf(a);
BigDecimal v2 = BigDecimal.valueOf(b);
if (v1.compareTo(v2) >= 0) {
return true;
}
return false;
} /**
* 判断 a 是否大于 b
*
* @param a
* @param b
* @return a&gt;b 返回true, a&lt;=b 返回 false
*/
public static boolean bigger(double a, double b) {
BigDecimal v1 = BigDecimal.valueOf(a);
BigDecimal v2 = BigDecimal.valueOf(b);
if (v1.compareTo(v2) == 1) {
return true;
}
return false;
} /**
* 判断 a 是否小于 b
*
* @param a
* @param b
* @return a&lt;b 返回true, a&gt;=b 返回 false
*/
public static boolean lessThan(double a, double b) {
BigDecimal v1 = BigDecimal.valueOf(a);
BigDecimal v2 = BigDecimal.valueOf(b);
if (v1.compareTo(v2) == -1) {
return true;
}
return false;
} /**
* 四舍五入保留小数点后两位
*
* @param num
* @return
*/
public static double roundDown(double num) {
return Double.valueOf(String.format("%.2f", num));
//return new BigDecimal(num).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
} public static void main(String[] args) {
Double a = 101.005D;
Double b = 0.0D;
Double s = AmountUtil.sub(a, b);
System.out.println(AmountUtil.roundDown(s));
System.out.println(AmountUtil.div(101.1D, 1D, 2));
}
}

Java工具类(util) 之01- 数学运算工具(精确运算)的更多相关文章

  1. Java常用类(四)之数组工具类Arrays

    前言 数组的工具类java.util.Arrays 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作. 一.Arra ...

  2. Java常用类(五)之集合工具类Collections

    前言 Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序.查询和修改等操作, 还提供了将集合对象置为不可变.对集合对象实现同步控 ...

  3. 小米开源文件管理器MiCodeFileExplorer-源码研究(3)-使用最多的工具类Util

    Util.java,使用最广泛~代码中很多地方,都写了注释说明~基本不需要怎么解释了~ package net.micode.fileexplorer.util; import java.io.Fil ...

  4. Springboot在工具类(Util)中使用@Autowired注入Service

    1. 使用@Component注解标记工具类MailUtil: 2. 使用@Autowired注入我们需要的bean: 3. 在工具类中编写init()函数,并使用@PostConstruct注解标记 ...

  5. 工具类分享之获取Request/Response工具类《RequestContextHolderUtil》

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aiyaya_/article/details/78975893前言在开发spring web项目时, ...

  6. Android工具类-关于网络、状态的工具类

    下方是一个很好的监测网络.状态的工具类 public class NetworkUtils { /** * 网络是否可用 * * @param activity * @return */ public ...

  7. 57. Collections(list的工具类)、Arrays(数组的工具类)

    List集合的工具类(Collections): 注意:Collection是单列集合的根接口  Collections是操作集合对象的工具类 1.对list集合排序: sort(List) 根据自然 ...

  8. Spring中提供的集合工具类util CollectionUtils

    转自:https://blog.csdn.net/fangwenzheng88/article/details/78457850 CollectionUtils类 /* * Copyright 200 ...

  9. 图片处理工具类 util

    PathUtil package util; public class PathUtil { private static String seperator = System.getProperty( ...

随机推荐

  1. ComBox、listBox、checklistBox控件

    omBox控件被称为下拉组合框控件,是由System.windows.Forms.ComBox类提供的,主要作用是讲一个集合数据以组合框的形式显示给用户,当用户单击时将以下拉框显示给用户,供用户选择一 ...

  2. Web前端性能优化的三个偏方

    首先牢骚几句...这一次性能优化针对的模块,初次开发阶段客户给的时间就非常少,俩月时间跳过设计一边需求分析一边编码,最后干出6000+的代码行.最终结果嘛,呵呵,除开一堆bug不说,性能就是个非常大的 ...

  3. 实例-PHP_SELF、 SCRIPT_NAME、 REQUEST_URI区别-获取前台公用文-dirname-PHP的"魔术常量"-str_replace

    Part1:实例 $_SERVER[PHP_SELF], $_SERVER[SCRIPT_NAME], $_SERVER['REQUEST_URI'] 在用法上是非常相似的,他们返回的都是与当前正在使 ...

  4. swoole框架快速入门

    swoole有两个部分. 一个是PHP扩展,用C开发的,这是核心. 另一个是框架,像yii.TP.Laravel一样,是PHP代码写的. swoole扩展本身提供了web服务器功能,可以替代php-f ...

  5. 线程协作--wait,notify:经典消费者生产者

    JDK 中关于wait,notify这两个方法的介绍: 1.wait:线程进入阻塞. synchronized (obj) { while (<condition does not hold&g ...

  6. json格式对象大括号中不能把键改为变量问题

    今天遇到了一个往json中写入变量的问题,下面代码是错误的写法 document.querySelector(".box").onclick = function(){ // 移动 ...

  7. c++实现全密码生成

    这里所谓的“全密码”指的是指定字符串中所有可能出现的密码.以字符串“0123456789”为例,可能出现的2位密码会有100个,即L^N个.(L代表字符串的长度,N代表要生成密码的位数). 第一种方法 ...

  8. Luogu 4240:毒瘤之神的考验

    传送门 Sol 分开考虑 \(\varphi(ij)\) 中 \(ij\) 的质因子 那么 \[\varphi(ij)=\frac{\varphi(i)\varphi(j)gcd(i,j)}{\var ...

  9. KDTree(Bzoj2648: SJY摆棋子)

    题面 传送门 KDTree 大概就是一个分割\(k\)维空间的数据结构,二叉树 建立:每层选取一维为关键字,把中间的点拿出来,递归左右,有个\(STL\)函数nth_element可以用一下 维护:维 ...

  10. 【Android】14.0 UI开发(五)——列表控件RecyclerView的瀑布布局排列实现

    1.0 列表控件RecyclerView的瀑布布局排列实现,关键词StaggeredGridLayoutManager LinearLayoutManager 实现顺序布局 GridLayoutMan ...