文/阿敏其人
本文出自阿敏其人简书博客,转载请注明出处和连接。
- 整数前的0去掉。
- 小数固定保留两位小数
- 兼容负数
- 数字检测
- 适配金融大数额
核心类
public class BigDecimalStringUtil {
/**
* 数字字符串,转成BigDecima格式,兼容大数字
* 并且保留两位小数
* @return
*/
public static String str2BigDecimalKeepDouble(String numStr){
if(!isNumeric(numStr)){
// 不是数字,直接返回空
return "";
}else{
// 是数字,那么那么就返回式子,保证有两位小数,整数前面不会出现0。
BigDecimal bigDecimal = new BigDecimal(numStr);
double doubleNum = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
/**
* String s=String.format("%.2f",d);
* 若double d=0.6566,输出结果为0.66;
* 若double d=0,输出结果为0.00;
*/
String keepTwoDecimalPlaces=String.format("%.2f",doubleNum);
return keepTwoDecimalPlaces;
}
}
/**
* 匹配是否为数字,小数点,大数字 负述适用
* @param str 可能为中文,也可能是-19162431.1254,不使用BigDecimal的话,变成-1.91624311254E7
* @return
* @author yutao
* @date 2016年11月14日下午7:41:22
*/
public static boolean isNumeric(String str) {
// 该正则表达式可以匹配所有的数字 包括负数
Pattern pattern = Pattern.compile("-?[0-9]+(\\.[0-9]+)?");
String bigStr;
try {
bigStr = new BigDecimal(str).toString();
} catch (Exception e) {
return false;//异常 说明包含非数字。
}
Matcher isNum = pattern.matcher(bigStr); // matcher是全匹配
if (!isNum.matches()) {
return false;
}
return true;
}
}
测试
String s1 = BigDecimalStringUtil.str2BigDecimalKeepDouble("0");
String s2 = BigDecimalStringUtil.str2BigDecimalKeepDouble("0.01");
String s3 = BigDecimalStringUtil.str2BigDecimalKeepDouble("-0.44");
String s4 = BigDecimalStringUtil.str2BigDecimalKeepDouble("00000.000045");
String s5 = BigDecimalStringUtil.str2BigDecimalKeepDouble("0007.89");
String s6 = BigDecimalStringUtil.str2BigDecimalKeepDouble("1232456.9898987");
String s7 = BigDecimalStringUtil.str2BigDecimalKeepDouble("1234567890999.99999");
String s8 = BigDecimalStringUtil.str2BigDecimalKeepDouble("-123456.00");
String s9 = BigDecimalStringUtil.str2BigDecimalKeepDouble("-762367.123123");
String s10 = BigDecimalStringUtil.str2BigDecimalKeepDouble("-0762367.1231234567");
String s11 = BigDecimalStringUtil.str2BigDecimalKeepDouble("1111.2222");
String s12 = BigDecimalStringUtil.str2BigDecimalKeepDouble("-000098989.6666");
String s13 = BigDecimalStringUtil.str2BigDecimalKeepDouble("-000098989.000123");
String s14 = BigDecimalStringUtil.str2BigDecimalKeepDouble("-1234567812345.000123");
String s15 = BigDecimalStringUtil.str2BigDecimalKeepDouble("1234567812345.000123");
String s16 = BigDecimalStringUtil.str2BigDecimalKeepDouble("123ssd123");
String s17 = BigDecimalStringUtil.str2BigDecimalKeepDouble(",123");
String s18 = BigDecimalStringUtil.str2BigDecimalKeepDouble(",-3qwe");
System.out.println("s1:"+s1);
System.out.println("s2:"+s2);
System.out.println("s3:"+s3);
System.out.println("s4:"+s4);
System.out.println("s5:"+s5);
System.out.println("s6:"+s6);
System.out.println("s7:"+s7);
System.out.println("s8:"+s8);
System.out.println("s9:"+s9);
System.out.println("s10:"+s10);
System.out.println("s11:"+s11);
System.out.println("s12:"+s12);
System.out.println("s13:"+s13);
System.out.println("s14:"+s14);
System.out.println("s15:"+s15);
System.out.println("s16:"+s16);
System.out.println("s17:"+s17);
System.out.println("s18:"+s18);
END,谢谢阅读。
部分参考:
https://blog.csdn.net/u013066244/article/details/53197756