package com.util;
import java.math.BigDecimal;
public class Arith {
private static final int DEF_DIV_SCALE = 10;
/**
* * 两个Double数相加 *
*
* @param v1 *
* @param v2 *
* @return Double
*/
public static Double add(Double v1, Double v2) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.add(b2).doubleValue());
}
public static BigDecimal add(BigDecimal v1, BigDecimal v2) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
return v1.add(v2);
}
public static Double add(Double[] vs) {
if(vs == null){
return 0.00;
}
BigDecimal b = new BigDecimal(0.00);
for(Double v : vs){
BigDecimal b1 = new BigDecimal(v);
b = b.add(b1);
}
return new Double(b.doubleValue());
}
/**
* * 两个Double数相减 *
*
* @param v1 *
* @param v2 *
* @return Double
*/
public static Double sub(Double v1, Double v2) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.subtract(b2).doubleValue());
}
public static BigDecimal sub(BigDecimal v1, BigDecimal v2) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
return v1.subtract(v2);
}
/**
* * 两个Double数相乘 *
*
* @param v1 *
* @param v2 *
* @return Double
*/
public static Double mul(Double v1, Double v2) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.multiply(b2).doubleValue());
}
public static BigDecimal mul(BigDecimal v1, BigDecimal v2) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
return v1.multiply(v2);
}
public static Double mul(Double v1, Double v2,int scale) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
if(scale<0){
scale=2;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.multiply(b2).setScale(scale,BigDecimal.ROUND_DOWN).doubleValue());
}
public static BigDecimal mul(BigDecimal v1, BigDecimal v2,int scale) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
if(scale<0){
scale=2;
}
return v1.multiply(v2).setScale(scale,BigDecimal.ROUND_DOWN);
}
/**
* * 两个Double数相除 *
*
* @param v1 *
* @param v2 *
* @return Double
*/
public static Double div(Double v1, Double v2) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP)
.doubleValue());
}
public static BigDecimal div(BigDecimal v1, BigDecimal v2) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
return v1.divide(v2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP);
}
/**
* * 两个Double数相除,并保留scale位小数 *
*
* @param v1 *
* @param v2 *
* @param scale *
* @return Double
*/
public static Double div(Double v1, Double v2, int scale) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
if (scale < 0) {
scale=2;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.divide(b2, scale, BigDecimal.ROUND_DOWN).doubleValue());
}
public static BigDecimal div(BigDecimal v1, BigDecimal v2, int scale) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
if (scale < 0) {
scale=2;
}
return v1.divide(v2, scale, BigDecimal.ROUND_DOWN);
}
public static BigDecimal setScale(BigDecimal v1,int scale) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if (scale < 0) {
scale=2;
}
return v1.setScale(scale,BigDecimal.ROUND_DOWN);
}
public static Double setScale(Double v1,int scale) {
if(v1==null){
v1=0.00;
}
if (scale < 0) {
scale=2;
}
BigDecimal b1 = new BigDecimal(v1.toString());
return new Double(b1.setScale(scale,BigDecimal.ROUND_DOWN).doubleValue());
}
/**
* 比较大小
*
* @param v1
* @param v2
* @return -1表示小于,0是等于,1是大于
*/
public static int compareTo(BigDecimal v1, BigDecimal v2) {
if (v1 == null) {
v1 = new BigDecimal(0.00);
}
if (v2 == null) {
v2 = new BigDecimal(0.00);
}
return v1.compareTo(v2);
}
public static int compareTo(Double v1, Double v2) {
if (v1 == null) {
v1 = 0.00;
}
if (v2 == null) {
v2 = 0.00;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return b1.compareTo(b2);
}
public static void main(String[] args){
System.out.println(compareTo(new Double("0.001"),new Double("0.0010")));
}
/**
* BigDecimal.setScale()方法用于格式化小数点
* setScale(1)表示保留一位小数,默认用四舍五入方式
* setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
* setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
* setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
*
* setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍
*
* setScaler(1,BigDecimal.ROUND_CEILING)接近正无穷大的舍入
*
* setScaler(1,BigDecimal.ROUND_FLOOR)接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样
*
* setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
*/
}
Double和BigDecimal 加减乘除工具类Arith
最新推荐文章于 2022-08-08 10:55:15 发布
本文介绍了一个Java实用工具类Arith,该类提供了一系列基于BigDecimal的数学运算方法,包括加、减、乘、除及小数位数设定等,确保了数值计算的精度和稳定性。
7317

被折叠的 条评论
为什么被折叠?



