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 发布