Java工具类(util) 之01- 数学运算工具(精确运算)
数学运算工具(精确运算)
/**
*
* @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>=b 返回true, a<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>b 返回true, a<=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<b 返回true, a>=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- 数学运算工具(精确运算)的更多相关文章
- Java常用类(四)之数组工具类Arrays
前言 数组的工具类java.util.Arrays 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作. 一.Arra ...
- Java常用类(五)之集合工具类Collections
前言 Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序.查询和修改等操作, 还提供了将集合对象置为不可变.对集合对象实现同步控 ...
- 小米开源文件管理器MiCodeFileExplorer-源码研究(3)-使用最多的工具类Util
Util.java,使用最广泛~代码中很多地方,都写了注释说明~基本不需要怎么解释了~ package net.micode.fileexplorer.util; import java.io.Fil ...
- Springboot在工具类(Util)中使用@Autowired注入Service
1. 使用@Component注解标记工具类MailUtil: 2. 使用@Autowired注入我们需要的bean: 3. 在工具类中编写init()函数,并使用@PostConstruct注解标记 ...
- 工具类分享之获取Request/Response工具类《RequestContextHolderUtil》
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aiyaya_/article/details/78975893前言在开发spring web项目时, ...
- Android工具类-关于网络、状态的工具类
下方是一个很好的监测网络.状态的工具类 public class NetworkUtils { /** * 网络是否可用 * * @param activity * @return */ public ...
- 57. Collections(list的工具类)、Arrays(数组的工具类)
List集合的工具类(Collections): 注意:Collection是单列集合的根接口 Collections是操作集合对象的工具类 1.对list集合排序: sort(List) 根据自然 ...
- Spring中提供的集合工具类util CollectionUtils
转自:https://blog.csdn.net/fangwenzheng88/article/details/78457850 CollectionUtils类 /* * Copyright 200 ...
- 图片处理工具类 util
PathUtil package util; public class PathUtil { private static String seperator = System.getProperty( ...
随机推荐
- 搭建Eclipse和MyEclipse的开发环境
主要步骤: 下载并配置Eclipse 建立并运行一个简单的javaSE项目 下载并破解MyEclipse 整合Eclipse和MyEclipse 开发环境和Tomcat结合 关于这个配置也可以参考:h ...
- jquery选择器【总结】
本文总结整理了jquery里和选择器相关的所有方法,通过这篇文章,可以让你学习到在jquery里使用选择器的所有方法. 一:基本选择器: $("#aijquery") 选择id值等 ...
- 使用AngularJS 添加行修改、删除表格数据
https://blog.csdn.net/xin_x1n/article/details/53070144 <html xmlns="http://www.w3.org/1999/x ...
- 在方法中new关键字的用处
如果在类A中有M1这个方法需方法 public virtual ovid m1() { console.writeline(“我的世界”); } 那么你在类B中继承的时候可以重写这个方法,也可以不重写 ...
- DataGridView 直接修改数据操作
DataGridView单元格进入编辑模式的方法: 双击或者f2: EditCellOnEnter 属性设为True,对DataGridView进行配置,当用户移动到该单元格后,该单元格可立即切换到编 ...
- 微信小程序(二)框架的基本组成
安装好 微信web开发者工具后. 让我们来了解一下工具的框架,上图: 工具总共分为三个部分,左上角红框框: 模拟器:模拟手机小程序界面,模拟器左上角可以选择手机型号,右上角红框处,千万别选成Offic ...
- JS实现最短路径之弗洛伊德(Floyd)算法
弗洛伊德算法是实现最小生成树的一个很精妙的算法,也是求所有顶点至所有顶点的最短路径问题的不二之选.时间复杂度为O(n3),n为顶点数. 精妙之处在于:一个二重初始化,加一个三重循环权值修正,完成了所有 ...
- GIT使用log命令显示中文乱码
背静: 公司项目使用GIT进行代码同步. 问题: 之前代码提交后,有中文备注,但是在使用git log查看代码历史记录的时候发现显示乱码,如下: 后查询相关资料,现将解决办法总结如下: 1.运行Git ...
- Exception in thread "main" java.nio.channels.NotYetConnectedException
import java.nio.channels.AsynchronousServerSocketChannel; import java.nio.channels.AsynchronousSocke ...
- HTML标签类型
标签分类: 一.块标签:块标签是指本身属性为display:block;的元素. 1.默认占一行可以设置宽高, 2.在不设置宽度的情况下,块级元素的宽度是它父级元素内容的宽度 3.在不设置高度的情况下 ...