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

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

作者: 阿敏其人 | 来源:发表于2018-09-12 10:56 被阅读162次

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


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

    END,谢谢阅读。


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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/tkzmgftx.html