package cn.edu.hbcf.common.utils; import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.regex.Pattern; public class NumberUtils { /**
* 处理Double类型数据,如果为空返回0,否则返回其值
*
* @param d
* @return
*/
public static double getDoubleNumber(Double d) { if (d != null) {
return d.doubleValue();
} else {
return 0;
} }
/**
* 判断 String 类型的数据是否能Double转换
* @param s
* @return
*/
public static boolean isNumString(String s){
Pattern pattern = Pattern.compile("^[-+]?\\d+(\\.\\d+)?");
//Pattern pattern = Pattern.compile("(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))"); return pattern.matcher(s).matches();
} /**
* 获取百分数,保留2为小数
*
* @param d
* @return
*/
public static String getPercentNumber(Double d) {
if(d==null){
d=0.0;
}
// 获取格式化对象
NumberFormat nt = NumberFormat.getPercentInstance();
// 设置百分数精确度2即保留两位小数
nt.setMinimumFractionDigits(2);
return nt.format(d);
}
/**
*
* @param d
* @param a
* @return
*/
public static double getDoubleFormat(Double d,int a){
if(d==null){
d=0.0;
}
BigDecimal bg = new BigDecimal(d);
return bg.setScale(a, BigDecimal.ROUND_HALF_UP).doubleValue();
} /**
* 保留小数
*
* @param value
* 位数
* @return
*/
public static double toFixed(double value) {
long lg = Math.round(value * 100); // 四舍五入
double d = lg / 100.0; // 注意:使用 100.0而不是 100
return d;
} public static double getFromPrecentNumber(String s) {
if (s != null && !"".equals(s)) {
double d = new Double(s.substring(0, s.indexOf('%'))) / 100.0;
return d;
} else
return 0;
}
/**
* 数值类型转化Double to Int
* @param d
* @return
*/
public static int toInt(Double d){
if(d == null){
return 0;
}else{
return (int)Math.round(d.doubleValue());
}
} public static String convertDouble(Double d){
if(d == null){
return "0";
}else{
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false); return nf.format(d);
}
} /**
* 数字金额大写转换,思想先写个完整的然后将如零拾替换成零
* 要用到正则表达式
*/
public static String digitUppercase(double n){
String fraction[] = {"角", "分"};
String digit[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String unit[][] = {{"元", "万", "亿"},
{"", "拾", "佰", "仟"}}; String head = n < 0? "负": "";
n = Math.abs(n); String s = "";
for (int i = 0; i < fraction.length; i++) {
s += (digit[(int)(Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
}
if(s.length()<1){
s = "整";
}
int integerPart = (int)Math.floor(n); for (int i = 0; i < unit[0].length && integerPart > 0; i++) {
String p ="";
for (int j = 0; j < unit[1].length && n > 0; j++) {
p = digit[integerPart%10]+unit[1][j] + p;
integerPart = integerPart/10;
}
s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
}
return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
} }