Java取整,固定保留两位小数,适配负数、金融数字。

文/阿敏其人
本文出自阿敏其人博客,转载请注明出处和连接。


  • 整数前的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);

Java取整,固定保留两位小数,适配负数、金融数字。_第1张图片
image.png

END,谢谢阅读。


部分参考:
https://blog.csdn.net/u013066244/article/details/53197756

你可能感兴趣的:(Java取整,固定保留两位小数,适配负数、金融数字。)