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

/**
*
* @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. 使用FileSystemWatcher监视指定目录

    使用 FileSystemWatcher 监视指定目录中的更改.可监视指定目录中的文件或子目录的更改. 以下是一个简单的实例,用来监控指定目录下文件的新增.删除.重命名等情况(文件内容更改会触发多次, ...

  2. NUmericupdown控件

    Numericupdown控件是由system.windows.froms.Numericupdown类提供的,主要作用是将一个数按一定的值进行增加或减少.它主要有四个常用属性   Increment ...

  3. JSON 教程

    1JSON 1.什么是 JSON ? 1.1JSON:JavaScript 对象表示法(JavaScript Object Notation). 1.2JSON 是存储和交换文本信息的语法.类似 XM ...

  4. 使用nodeJs在本地搭建最简单的服务

    在搭建web服务器之前,需要先安装node.js 安装后node.js,接下来就需要安装http的镜像文件 一:本机安装软件 下载最新的NodeJs,进行安装.一直点击下一步就可以了.然后就可以查看安 ...

  5. php 函数的嵌套

    /*一定要小心变量作用域*/ function insert_dynamic() { function bar() { echo "I don't exist until insert_dy ...

  6. sql-pivot

    PIVOT PIVOT运算符用于在列和行之间进行数据旋转或透视转换,同时执行聚合运算 ,,) Order By empid asc Select * From ( Select empid,YEAR( ...

  7. 用户登陆显示cpu、负载、内存信息

    #用户登陆显示cpu.负载.内存信息 #!/bin/bash # hostip=`ifconfig eth0 |awk -F" +|:" '/Bcast/{print $4}'` ...

  8. flask多线程多协程操作

    local的作用:各个线程各开辟一块空间互不影响 基于local""" import threading from threading import local impo ...

  9. spring+quarts常见问题

    javax/transaction/UserTransactionCaused by: java.lang.NoClassDefFoundError: javax/transaction/UserTr ...

  10. Microsoft Azure 微软云平台系列新品发布

    在移动为先,云为先的今天,微软为拥抱云文化的企业提供了技术和工具.利用创新且全面的移动解决方案和开发者工具,微软有独到之处,它帮助所有客户在云为先时代中发现潜在价值. 正如希望加快云创新步伐的你们所期 ...