NumberUtil.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. package com.mes.core;
  2. import java.math.BigDecimal;
  3. import java.text.DecimalFormat;
  4. /**
  5. * 数值处理工具
  6. *
  7. * @author yingp
  8. *
  9. */
  10. public class NumberUtil {
  11. /**
  12. * 是否为空、0
  13. *
  14. * @param numberObj
  15. * @return
  16. */
  17. public static boolean isEmpty(Object numberObj) {
  18. try {
  19. return numberObj == null || "0".equals(String.valueOf(numberObj)) || Integer.parseInt(numberObj.toString()) == 0;
  20. } catch (Exception e) {
  21. return false;
  22. }
  23. }
  24. /**
  25. * format double类型
  26. *
  27. * @param number
  28. * 需要format的数据
  29. * @param f
  30. * 保留f位的小数
  31. * @return format之后的double类型的数据
  32. */
  33. public static double formatDouble(double number, int f) {
  34. if (f > 0) {
  35. BigDecimal b = new BigDecimal(Double.toString(number));
  36. BigDecimal one = new BigDecimal("1");
  37. return b.divide(one, f, BigDecimal.ROUND_HALF_UP).doubleValue();
  38. } else {
  39. return Math.floor(number);
  40. }
  41. }
  42. /**
  43. * format double类型
  44. *
  45. * @param number
  46. * 需要format的数据
  47. * @param f
  48. * 保留f位的小数
  49. * @return format之后的double类型的数据
  50. */
  51. public static double formatDouble(String number, int f) {
  52. double n = Double.parseDouble(number);
  53. if (f > 0) {
  54. BigDecimal b = new BigDecimal(number);
  55. BigDecimal one = new BigDecimal("1");
  56. return b.divide(one, f, BigDecimal.ROUND_HALF_UP).doubleValue();
  57. } else {
  58. return Math.floor(n);
  59. }
  60. }
  61. /**
  62. * 浮点型转成BigDecimal
  63. *
  64. * @param number
  65. * @return
  66. */
  67. public static String parseBigDecimal(double number) {
  68. return String.valueOf(BigDecimal.valueOf(number));
  69. }
  70. /**
  71. * 数字格式化
  72. *
  73. * @param number
  74. * @param f
  75. * @return
  76. */
  77. public static String formatNumber(Object number, int f) {
  78. if ("0".equals(String.valueOf(number)))
  79. return "0";
  80. if (number instanceof String)
  81. number = Double.parseDouble(number.toString());
  82. DecimalFormat df = (DecimalFormat) DecimalFormat.getInstance();
  83. df.setGroupingSize(3);
  84. int len = number.toString().length();
  85. if (number.toString().indexOf(".") > 0)
  86. len = number.toString().indexOf(".");
  87. String pattern = len > 3 ? "0,000" : "0";
  88. for (int i = 0; i < f; i++) {
  89. if (i == 0)
  90. pattern += ".";
  91. pattern += "0";
  92. }
  93. df.applyPattern(pattern);
  94. try {
  95. return df.format(number);
  96. } catch (Exception e) {
  97. return null;
  98. }
  99. }
  100. /**
  101. * 设置小数点保留位数
  102. * */
  103. public static float subFloat(float f, int length) {
  104. String fStr = String.valueOf(f);
  105. int i = fStr.indexOf(".");
  106. String returnStr = null;
  107. if (fStr.length() > i + 1 + length) {
  108. returnStr = fStr.substring(0, i + 1 + length);
  109. } else
  110. returnStr = fStr;
  111. float returnf = (Float.valueOf(returnStr)).floatValue();
  112. return returnf;
  113. }
  114. /**
  115. * int数组转化成Integer数组
  116. */
  117. public static Integer[] toIntegerArray(int[] arr) {
  118. int n = arr.length;
  119. Integer[] iarr = new Integer[n];
  120. for (int i = 0; i < n; i++) {
  121. iarr[i] = new Integer(arr[i]);
  122. }
  123. return iarr;
  124. }
  125. public static Number nvl(Number number, Number ifNullNumber) {
  126. return number == null ? ifNullNumber : number;
  127. }
  128. public static int compare(Double paramDouble1, Double paramDouble2) {
  129. if (paramDouble1 == null)
  130. paramDouble1 = 0.0;
  131. if (paramDouble2 == null)
  132. paramDouble2 = 0.0;
  133. return Double.compare(paramDouble1, paramDouble2);
  134. }
  135. /**
  136. * Double型加法运算
  137. *
  138. * @param d1
  139. * 第一个加数
  140. * @param ds
  141. * 若干个加数
  142. * @return 相加的结果
  143. * @author suntg
  144. */
  145. public static double add(Double d1, Double... ds) {
  146. BigDecimal bd = new BigDecimal(Double.toString(d1));
  147. for (Double d : ds) {
  148. bd = bd.add(new BigDecimal(Double.toString(d)));
  149. }
  150. return bd.doubleValue();
  151. }
  152. /**
  153. * Double型加法运算
  154. *
  155. * @param d1
  156. * 第一个加数
  157. * @param ds
  158. * 若干个加数
  159. * @return 相加的结果
  160. * @author suntg
  161. */
  162. public static double add(String ds1, String... dss) {
  163. BigDecimal bd = new BigDecimal(ds1);
  164. for (String ds : dss) {
  165. bd = bd.add(new BigDecimal(ds));
  166. }
  167. return bd.doubleValue();
  168. }
  169. /**
  170. * Double型减法运算
  171. *
  172. * @param d1
  173. * 被减数
  174. * @param d2
  175. * 减数
  176. * @return 运算结果
  177. * @author suntg
  178. */
  179. public static double sub(Double d1, Double d2) {
  180. BigDecimal b1 = new BigDecimal(Double.toString(d1));
  181. BigDecimal b2 = new BigDecimal(Double.toString(d2));
  182. return b1.subtract(b2).doubleValue();
  183. }
  184. /**
  185. * Double 型乘法运算
  186. *
  187. * @param d1
  188. * 第一个乘数
  189. * @param d2
  190. * 第二个乘数
  191. * @return 运算结果
  192. * @author suntg
  193. */
  194. public static double mul(Double d1, Double d2) {
  195. BigDecimal b1 = new BigDecimal(Double.toString(d1));
  196. BigDecimal b2 = new BigDecimal(Double.toString(d2));
  197. return b1.multiply(b2).doubleValue();
  198. }
  199. /**
  200. * Double 型除法运算
  201. *
  202. * @param d1
  203. * 被除数
  204. * @param d2
  205. * 除数
  206. * @param scale
  207. * 小数点四舍五入精度
  208. * @return 运算结果
  209. * @author suntg
  210. */
  211. public static double div(Double d1, Double d2, int scale) {
  212. if (scale < 0) {
  213. throw new IllegalArgumentException("四舍五入精度必须大于0");
  214. }
  215. if (d2.equals(0)) {
  216. throw new IllegalArgumentException("被除数不能为0");
  217. }
  218. BigDecimal b1 = new BigDecimal(Double.toString(d1));
  219. BigDecimal b2 = new BigDecimal(Double.toString(d2));
  220. return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  221. }
  222. /**
  223. * 默认小数点四舍五入精度为6的Double型除法运算
  224. *
  225. * @param d1
  226. * 被除数
  227. * @param d2
  228. * 除数
  229. * @return 运算结果
  230. * @author suntg
  231. */
  232. public static double div(Double d1, Double d2) {
  233. return div(d1, d2, 6);
  234. }
  235. }