package com.matrix.system.hive.plugin.util; import java.math.BigDecimal; import java.text.NumberFormat; import java.util.Random; import com.matrix.core.tools.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * 数字操作类,类型转换等 * * @author Ron * @createTime 2014.08.30 */ public class NumberUtils { public static Log log = LogFactory.getLog(NumberUtils.class); /** * 生成0~maxValue的随机数 * * @param maxValue * @return */ public static int random(int maxValue) { if (maxValue == 0) { return 0; } Random random = new Random(); if (maxValue < 0) { return -(random.nextInt(-maxValue)); } return random.nextInt(maxValue); } /** * 3.1456 -->3.146 * @Title: getDoubleNum * @author:jyy * @param value 值 * @param num 精度数 * @return * double 返回类型 * @date 2016年8月24日 上午11:03:32 * @throws */ public static double getDoubleNum(Double value,int num){ NumberFormat nFormat=NumberFormat.getNumberInstance(); nFormat.setMaximumFractionDigits(num);//设置小数点后面位数为 return new Double(nFormat.format(value).replace(",", "")); } /** * String转换long,默认值为0 * * @param str * @return */ public static long stringToLong(String str) { try { return Long.valueOf(str).longValue(); } catch (Exception e) { log.error(e.getLocalizedMessage(), e); return 0; } } /** * String转换long,默认值为0 * * @param str * @return */ public static int stringToint(String str) { try { return Integer.valueOf(str).intValue(); } catch (Exception e) { log.error(e.getLocalizedMessage(), e); return 0; } } /** * 将字符串转换为BidDecaiml类型 str为空返回0 * * @param str * @return */ public static BigDecimal stringToBigDecimal(String str) { try { if (StringUtils.isNotBlank(str)) { return new BigDecimal(str); } } catch (Exception e) { log.error(e.getLocalizedMessage(), e); } return new BigDecimal(0); } // 检查字符串s是否全为数字 public static boolean checkIsNumbers(String x) { if (null == x) { return false; } for (Character c : x.toCharArray()) { if (c.compareTo('0') < 0 || c.compareTo('9') > 0) { return false; } } return true; } /** * 数字1,2,3转成中文数字壹,贰,叁 * * @param x * @return */ public static String NumberTransfromCN(String x) { String[] unms = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; String[] digits = new String[] { "", "拾", "佰", "仟" }; String[] units = new String[] { "", "[万]", "[亿]", "[万亿]" }; return transfrom(x, unms, digits, units); } /** * 数字1,2,3转成中文数字一,二,三 * * @param x * @return */ public static String NumberTransfrom(String x) { String[] unms = new String[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; String[] digits = new String[] { "", "十", "百", "千" }; String[] units = new String[] { "", "万", "亿", "万亿" }; return transfrom(x, unms, digits, units); } /** * 数字转成中文数字 * * @param x * @return */ public static String transfrom(String x, String[] unms, String[] digits, String[] units) { if (null == x) { return "您输入的字符串地址为null!"; } if (0 == x.length()) { return "您输入的字符串长度为0,请输入要转换的数字!"; } if (false == checkIsNumbers(x)) { return "您输入的字符不都为数字,无法转换!"; } if (x.length() > 16) { return "您输入的字符串长度大于16,无法转换!"; } // 去除字符串首部的0,例如:0010->10 int fm; for (fm = 0; fm < x.length(); fm++) { if (x.charAt(fm) != '0') { break; } } x = x.substring(fm);// 去除完毕 // 把字符串看作一些组,例如:123456789->1,2345,6789 String result = ""; int p = 0; int m = x.length() % 4; int k = (m > 0 ? x.length() / 4 + 1 : x.length() / 4); // 从最左边的那组开始,向右循环 for (int i = k; i > 0; i--) { int len = 4; if (i == k && m != 0)// 当i为最左边的那组时,组长度可能有变化 { len = m; } String s = x.substring(p, p + len); int le = s.length(); for (int j = 0; j < le; j++) { int n = Integer.parseInt(s.substring(j, j + 1)); if (0 == n) { if (j < le - 1 && Integer.parseInt(s.substring(j + 1, j + 2)) > 0 && !result.endsWith(unms[0])) {// 加零的条件:不为最后一位 // && // 下一位数字大于0 // && // 以前没有加过“零” result += unms[0]; } } else { if (!(n == 1 && (result.endsWith(unms[0]) || result.length() == 0) && j == le - 2)) {// 处理1013一千零"十三",1113 // 一千一百"一十三" result += unms[n]; } result += digits[le - j - 1]; } } if (0 != Integer.parseInt(s))// 如果这组数字不全是 0 ,则加上单位:万,亿,万亿 { result += units[i - 1]; } p += len; } return result; } }