| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- package com.mes.core;
- import java.math.BigDecimal;
- import java.text.DecimalFormat;
- /**
- * 数值处理工具
- *
- * @author yingp
- *
- */
- public class NumberUtil {
- /**
- * 是否为空、0
- *
- * @param numberObj
- * @return
- */
- public static boolean isEmpty(Object numberObj) {
- try {
- return numberObj == null || "0".equals(String.valueOf(numberObj)) || Integer.parseInt(numberObj.toString()) == 0;
- } catch (Exception e) {
- return false;
- }
- }
- /**
- * format double类型
- *
- * @param number
- * 需要format的数据
- * @param f
- * 保留f位的小数
- * @return format之后的double类型的数据
- */
- public static double formatDouble(double number, int f) {
- if (f > 0) {
- BigDecimal b = new BigDecimal(Double.toString(number));
- BigDecimal one = new BigDecimal("1");
- return b.divide(one, f, BigDecimal.ROUND_HALF_UP).doubleValue();
- } else {
- return Math.floor(number);
- }
- }
- /**
- * format double类型
- *
- * @param number
- * 需要format的数据
- * @param f
- * 保留f位的小数
- * @return format之后的double类型的数据
- */
- public static double formatDouble(String number, int f) {
- double n = Double.parseDouble(number);
- if (f > 0) {
- BigDecimal b = new BigDecimal(number);
- BigDecimal one = new BigDecimal("1");
- return b.divide(one, f, BigDecimal.ROUND_HALF_UP).doubleValue();
- } else {
- return Math.floor(n);
- }
- }
- /**
- * 浮点型转成BigDecimal
- *
- * @param number
- * @return
- */
- public static String parseBigDecimal(double number) {
- return String.valueOf(BigDecimal.valueOf(number));
- }
- /**
- * 数字格式化
- *
- * @param number
- * @param f
- * @return
- */
- public static String formatNumber(Object number, int f) {
- if ("0".equals(String.valueOf(number)))
- return "0";
- if (number instanceof String)
- number = Double.parseDouble(number.toString());
- DecimalFormat df = (DecimalFormat) DecimalFormat.getInstance();
- df.setGroupingSize(3);
- int len = number.toString().length();
- if (number.toString().indexOf(".") > 0)
- len = number.toString().indexOf(".");
- String pattern = len > 3 ? "0,000" : "0";
- for (int i = 0; i < f; i++) {
- if (i == 0)
- pattern += ".";
- pattern += "0";
- }
- df.applyPattern(pattern);
- try {
- return df.format(number);
- } catch (Exception e) {
- return null;
- }
- }
- /**
- * 设置小数点保留位数
- * */
- public static float subFloat(float f, int length) {
- String fStr = String.valueOf(f);
- int i = fStr.indexOf(".");
- String returnStr = null;
- if (fStr.length() > i + 1 + length) {
- returnStr = fStr.substring(0, i + 1 + length);
- } else
- returnStr = fStr;
- float returnf = (Float.valueOf(returnStr)).floatValue();
- return returnf;
- }
- /**
- * int数组转化成Integer数组
- */
- public static Integer[] toIntegerArray(int[] arr) {
- int n = arr.length;
- Integer[] iarr = new Integer[n];
- for (int i = 0; i < n; i++) {
- iarr[i] = new Integer(arr[i]);
- }
- return iarr;
- }
- public static Number nvl(Number number, Number ifNullNumber) {
- return number == null ? ifNullNumber : number;
- }
- public static int compare(Double paramDouble1, Double paramDouble2) {
- if (paramDouble1 == null)
- paramDouble1 = 0.0;
- if (paramDouble2 == null)
- paramDouble2 = 0.0;
- return Double.compare(paramDouble1, paramDouble2);
- }
- /**
- * Double型加法运算
- *
- * @param d1
- * 第一个加数
- * @param ds
- * 若干个加数
- * @return 相加的结果
- * @author suntg
- */
- public static double add(Double d1, Double... ds) {
- BigDecimal bd = new BigDecimal(Double.toString(d1));
- for (Double d : ds) {
- bd = bd.add(new BigDecimal(Double.toString(d)));
- }
- return bd.doubleValue();
- }
- /**
- * Double型加法运算
- *
- * @param d1
- * 第一个加数
- * @param ds
- * 若干个加数
- * @return 相加的结果
- * @author suntg
- */
- public static double add(String ds1, String... dss) {
- BigDecimal bd = new BigDecimal(ds1);
- for (String ds : dss) {
- bd = bd.add(new BigDecimal(ds));
- }
- return bd.doubleValue();
- }
- /**
- * Double型减法运算
- *
- * @param d1
- * 被减数
- * @param d2
- * 减数
- * @return 运算结果
- * @author suntg
- */
- public static double sub(Double d1, Double d2) {
- BigDecimal b1 = new BigDecimal(Double.toString(d1));
- BigDecimal b2 = new BigDecimal(Double.toString(d2));
- return b1.subtract(b2).doubleValue();
- }
- /**
- * Double 型乘法运算
- *
- * @param d1
- * 第一个乘数
- * @param d2
- * 第二个乘数
- * @return 运算结果
- * @author suntg
- */
- public static double mul(Double d1, Double d2) {
- BigDecimal b1 = new BigDecimal(Double.toString(d1));
- BigDecimal b2 = new BigDecimal(Double.toString(d2));
- return b1.multiply(b2).doubleValue();
- }
- /**
- * Double 型除法运算
- *
- * @param d1
- * 被除数
- * @param d2
- * 除数
- * @param scale
- * 小数点四舍五入精度
- * @return 运算结果
- * @author suntg
- */
- public static double div(Double d1, Double d2, int scale) {
- if (scale < 0) {
- throw new IllegalArgumentException("四舍五入精度必须大于0");
- }
- if (d2.equals(0)) {
- throw new IllegalArgumentException("被除数不能为0");
- }
- BigDecimal b1 = new BigDecimal(Double.toString(d1));
- BigDecimal b2 = new BigDecimal(Double.toString(d2));
- return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
- }
- /**
- * 默认小数点四舍五入精度为6的Double型除法运算
- *
- * @param d1
- * 被除数
- * @param d2
- * 除数
- * @return 运算结果
- * @author suntg
- */
- public static double div(Double d1, Double d2) {
- return div(d1, d2, 6);
- }
- }
|