Java-精确计算工具类
import java.math.BigDecimal;
import java.math.RoundingMode; /**
* 精确计算工具类(加,减,乘,除,返回较大值,返回较小值)
*/
public class CalculationUtil { /**
* 提供精确加法计算的add方法
*/
public static String add(String value1, String value2) {
return add(value1, value2, 0, 0);
} /**
* 提供精确加法计算的add方法(默認四捨五入)
* @param value1 被加数
* @param value2 加数
* @param scale 精确范围(小数点后几位)
*/
public static String add(String value1, String value2, int scale) {
return add(value1, value2, scale, BigDecimal.ROUND_HALF_UP);
} /**
* 提供精确加法计算的add方法
* @param value1 被加数
* @param value2 加数
* @param scale 精确范围(小数点后几位)
* @param roundingMode 精確模式
*/
public static String add(String value1, String value2, int scale, int mode) {
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
BigDecimal result = b1.add(b2);
// mode为0,则不需要精确
if (mode != 0) {
result = result.setScale(scale, mode);
}
return result.toString();
} public static int compareTo(String value1, String value2, int scale, int mode) {
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
BigDecimal result = b1.subtract(b2);
// mode为0,则不需要精确
if (mode != 0) {
result = result.setScale(scale, mode);
}
return result.compareTo(BigDecimal.ZERO);
} /**
* 提供精确的除法运算方法divide
* @param value1 被除数
* @param value2 除数
*/
public static String divide(String value1, String value2) throws IllegalAccessException {
return divide(value1, value2, 0, null);
} /**
* 提供精确的除法运算方法divide(默認四捨五入)
* @param value1 被除数
* @param value2 除数
* @param scale 精确范围(小数点后几位)
*/
public static String divide(String value1, String value2, int scale) throws IllegalAccessException {
return divide(value1, value2, scale, RoundingMode.HALF_UP);
} /**
* 提供精确的除法运算方法divide
*
* @param value1 被除数
* @param value2 除数
* @param scale 精确范围(小数点后几位)
* @param roundingMode 精確模式
*/
public static String divide(String value1, String value2, int scale, RoundingMode roundingMode)
throws IllegalAccessException {
// 如果精确范围小于0,抛出异常信息
if (scale < 0) {
throw new IllegalAccessException("精确度不能小于0");
}
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
// roundingMode为null,则不需要精确
if (roundingMode != null) {
return new Double(b1.divide(b2, scale, roundingMode).doubleValue()).toString();
} else {
return new Double(b1.divide(b2).doubleValue()).toString();
}
} /**
* 比较大小 :返回较大的那个
*/
public static String getMax(String value1, String value2) {
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return new Double(b1.max(b2).doubleValue()).toString();
} /**
* 比较大小 :返回较小的那个
*/
public static String getMin(String value1, String value2) {
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return new Double(b1.min(b2).doubleValue()).toString();
} /**
*
* 提供精确乘法运算的multiply方法
* @param value1 被乘数
* @param value2 乘数
* @return 两个参数的积
*/
public static String multiply(String value1, String value2) {
return multiply(value1, value2, 0, 0);
} /**
* 提供精确乘法运算的multiply方法(默認四捨五入)
* @param value1 被乘数
* @param value2 乘数
* @param scale 精确范围(小数点后几位)
*/
public static String multiply(String value1, String value2, int scale) {
return multiply(value1, value2, scale, BigDecimal.ROUND_HALF_UP);
} /**
* 提供精确乘法运算的multiply方法
* @param value1 被乘数
* @param value2 乘数
* @param scale 精确范围(小数点后几位)
* @param roundingMode 精確模式
*/
public static String multiply(String value1, String value2, int scale, int mode) {
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
BigDecimal result = b1.multiply(b2);
// mode为0,则不需要精确
if (mode != 0) {
result = result.setScale(scale, mode);
}
return result.toString();
} /**
* 提供精确减法运算的subtract方法
* @param value1 被减数
* @param value2 减数
* @return 两个参数的差
*/
public static String subtract(String value1, String value2) {
return subtract(value1, value2, 0, 0);
} /**
* 提供精确减法运算的subtract方法(默認四捨五入)
* @param value1 被减数
* @param value2 减数
* @param scale 精确范围(小数点后几位)
*/
public static String subtract(String value1, String value2, int scale) {
return subtract(value1, value2, scale, BigDecimal.ROUND_HALF_UP);
} /**
* 提供精确减法运算的subtract方法
* @param value1 被减数
* @param value2 减数
* @param scale 精确范围(小数点后几位)
* @param roundingMode 精確模式
*/
public static String subtract(String value1, String value2, int scale, int mode) {
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
BigDecimal result = b1.subtract(b2);
// mode为0,则不需要精确
if (mode != 0) {
result = result.setScale(scale, mode);
}
return result.toString();
}
}
Java-精确计算工具类的更多相关文章
- java精确计算工具类
java精确计算工具类 import java.math.BigDecimal; import java.math.RoundingMode; import java.math.BigDecimal; ...
- BigDecimal精确计算工具类
前言 在实际开发中,遇到例如货币,统计等商业计算的时候,一般需要采用java.math.BigDecimal类来进行精确计算.而这类操作通常都是可预知的,也就是通用的.所以,写了个工具类来方便以后的工 ...
- java精确计算、精确计算工具类
java精确计算 package org.aisino.erp.webservice.dzfp.util; import java.math.BigDecimal; public class Math ...
- JAVA简单精确计算工具类
1 public class ArithUtil { 2 3 // 默认除法运算精度 4 private static final int DEF_DIV_SCALE = 10; 5 6 privat ...
- 使用BigDecimal进行精确计算工具类
package com.develop.util; import java.math.BigDecimal; import java.math.RoundingMode; public class M ...
- Java精确计算
Java精确计算 如果我们编译运行下面这个程序会看到什么? public class Test{ public static void main(String args[]){ System.out. ...
- HttpTool.java(在java tool util工具类中已存在) 暂保留
HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...
- java文件处理工具类
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...
- java格式处理工具类
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
随机推荐
- SpringBoot 接收 单个String入参之解决方案
场景: 在做接口时,有的时候,接口入参只需要一个参数,如果将一个参数封装成一个对象很麻烦,故有了以下方式: 思路: spring自带的参数解析器貌似是不具备这个能力的,所有自定义 方式方法: 1.定义 ...
- winform 多线程中ShowDialog()无效的解决办法
在使用Winform开发的过程,不可避免的要使用多线程,其中会在多线程中会调用窗口的ShowDialog方法,但实际上并不是模式窗口. private void Form1_Load(object s ...
- CentOS6.5安装中文支持
本人在安装CentOS6.5时选择是英文版,安装后打开文档,发现好些文档成了乱码了. 这个问题的原因是没有中文支持. 解决方法: 1.安装中文支持包 # yum groupinstall " ...
- Java语言与C语言混合编程(1)--Java native 关键字
一. 什么是 native Method 简单地讲,一个 native Method 就是一个java调用非java代码的接口.一个 native Method 是这样一个java的方法:该方法的实现 ...
- erlang的websocket例子
创建工程 rebar-creator create-app websocket_demo 文件列表 route_helper.erl -module(route_helper). -export([g ...
- 确保nginx安全的10个技巧
Nginx是当今最流行的Web服务器之一.它为世界上7%的web流量提供服务而且正在以惊人的速度增长.它是个让人惊奇的服务器,我愿意部署它. 下面是一个常见安全陷阱和解决方案的列表,它可以辅助来确保你 ...
- AD域中客户端时间与服务器同步
1.域控配置 修改注册表,设置域控服务器名称 设置组策略,启动NTP服务器 域策略中设置windows time服务自动启动 2.客户端 更新域策略gpupdate /force 如果不重启的话,先n ...
- python学习(二十一) Python 中的链式赋值
Python的链式赋值如下:
- css 定位position总结
在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之. CSS position 属性值: absol ...
- JAVA访问控制变量、类变量、类方法
1.私有:同类中 2.默认:同包中的类 3.保护:同包中的类 子类中(继承性) 4.公有:无范围 创建子类并覆盖方法时,必须考虑原来方法的访问控制: 作为通用的规则,覆盖方法是,新方法的访问控制不能 ...