package com.by4cloud.platformx.device.util; import java.math.BigDecimal; /** * @author xfei * @date 2022/5/27下午8:26 */ public class NumUtils { /** * 精确小数 * @param f 小数 * @param length 精确位数 * @return */ public static Float accurateFloat(Float f,int length){ BigDecimal b = new BigDecimal(f.toString()); f = b.setScale(length,BigDecimal.ROUND_HALF_UP).floatValue(); return f; } public static Float accurateFloat(Float f){ return accurateFloat(f,3); } public static Double accurateFloat(Double f,int length){ BigDecimal b = new BigDecimal(f.toString()); f = b.setScale(length,BigDecimal.ROUND_HALF_UP).doubleValue(); return f; } public static Double accurateFloat(Double f){ return accurateFloat(f,3); } public static Double accurateDouble(Double f,int length){ if(f==null){ f=0d; } BigDecimal b2 = new BigDecimal(f.toString()); f = b2.setScale(length,BigDecimal.ROUND_HALF_UP).doubleValue(); return f; } public static Double accurateDouble(Double f){ return accurateDouble(f,3); } /** * 加 * @param a * @param b * @return */ public static Double addDouble(Double a,Double b){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.add(bb); aa = aa.setScale(2,BigDecimal.ROUND_HALF_UP); return aa.doubleValue(); } public static Double addDoubles(Double ... a){ Double result = 0d; for (Double d :a){ result =addDouble(result,d); } return result; } public static Double addDoubles(int len,Double ... a){ Double result = 0d; for (Double d :a){ result =addDouble(result,d,len); } return result; } /** * 减 * @param a * @param b * @return */ public static Double subtractDouble(Double a,Double b){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.subtract(bb); aa = aa.setScale(2,BigDecimal.ROUND_HALF_UP); return aa.doubleValue(); } /** * 减 只舍不入 * @param a * @param b * @return */ public static Double subtractDoubleDown(Double a,Double b){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.subtract(bb); aa = aa.setScale(2,BigDecimal.ROUND_DOWN); return aa.doubleValue(); } /** * 乘 * @param a * @param b * @return */ public static Double multiplyDouble(Double a,Double b){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.multiply(bb); aa = aa.setScale(2,BigDecimal.ROUND_HALF_UP); return aa.doubleValue(); } /** * 乘 只舍不入 * @param a * @param b * @return */ public static Double multiplyDoubleDown(Double a,Double b){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.multiply(bb); aa = aa.setScale(2,BigDecimal.ROUND_DOWN); return aa.doubleValue(); } /** * 除 * 除法 * @param a * @param b * @return */ public static Double divideDouble(Double a,Double b){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.divide(bb); aa = aa.setScale(2,BigDecimal.ROUND_HALF_UP); return aa.doubleValue(); } public static Double divideDoubleUp(Double a,Double b){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.divide(bb,BigDecimal.ROUND_HALF_UP); aa = aa.setScale(2,BigDecimal.ROUND_HALF_UP); return aa.doubleValue(); } /** * 除 * 除法 * @param a * @param b * @return */ public static Double divideDoubleDown(Double a,Double b){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.divide(bb); aa = aa.setScale(2,BigDecimal.ROUND_DOWN); return aa.doubleValue(); } /** * 加 * @param a * @param b * @return */ public static Double addDouble(Double a,Double b,int len){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.add(bb); aa = aa.setScale(len,BigDecimal.ROUND_HALF_UP); return aa.doubleValue(); } /** * 减 * @param a * @param b * @return */ public static Double subtractDouble(Double a,Double b,int len){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.subtract(bb); aa = aa.setScale(len,BigDecimal.ROUND_HALF_UP); return aa.doubleValue(); } /** * 乘 * @param a * @param b * @return */ public static Double multiplyDouble(Double a,Double b,int len){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.multiply(bb); aa = aa.setScale(len,BigDecimal.ROUND_HALF_UP); return aa.doubleValue(); } /** * 除 * @param a * @param b * @return */ public static Double divideDouble(Double a,Double b,int len){ if (a==null)a=0d; if (b==null)b=0d; BigDecimal aa = new BigDecimal(a+""); BigDecimal bb = new BigDecimal(b+""); aa = aa.divide(bb,len, BigDecimal.ROUND_HALF_UP); return aa.doubleValue(); } public static Double floatToD(Float f){ if (f==null){ return new Double(0); } return new Double(f); } public static void main(String[] args) { // System.out.println(NumUtils.accurateDouble(60.1575,3)); System.out.println(NumUtils.addDoubles(6.1234d,6.1234d,4.33d)); } }