• 关于数字类型的字符串,或者double,或者integer 相除得到百分数 并四舍五入保留两位小数的通用方法


    1,数字类型的字符串,相除得到百分数 并四舍五入保留两位小数的通用方法
    (注意的点:1,如何判断字符串是合法的数字–包括小数,正负数(看下面代码中的正则表达式,但是效率不高,详细解释看第6点)
    2,字符串的数字怎么转变成数字类型—new BigDecimal(v1)
    3,BigDecimal类型的数字怎么和零进行比较
    4,b1.divide–进行除法
    5,percent.format–对一个数字生成百分数
    6,如何判断字符串是数字,
    链接:1,https://www.jianshu.com/p/bf81ede32976
    Java正则表达式验证字符串是否为正负整数和小数
    注意:用正则表达式判断 没有StringUtils.isNumeric(str)效率高。
    但是StringUtils.isNumeric(str)有一个坑:https://blog.csdn.net/qq_53316135/article/details/120267724

     System.out.println("传入小数输出的结果为:" + StringUtils.isNumeric("1.0")); // false
    
    • 1

    那用正则表达式效率不高,StringUtils.isNumeric又判断不了正负数和小数,怎么办呢?
    看StringUtils.isNumeric的内部实现:

     public static boolean isNumeric(String str) {
            if (str == null) {
                return false;
            }
            int sz = str.length();
            for (int i = 0; i < sz; i++) {
                if (Character.isDigit(str.charAt(i)) == false) {
                    return false;
                }
            }
            return true;
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    可以看到:是判断每位是否是数字,那么改进一下这个方法:当有小数点或者正负号的时候,不return false ,return true就可以了
    还有一个办法更简单:https://blog.csdn.net/weixin_52935673/article/details/122718608
    只不过你的项目中要能引入:cn.hutool.core.util.NumberUtil这个包)
    7,java判断字符串是否为double型:https://blog.csdn.net/JauneChing/article/details/122431885

     /**
         * 两个数相除,返回一个百分数
         * @param v1
         * @param v2
         * @return
         */
        public static String getRatio(String v1, String v2) {
            String regularExpression = "(^[+-]?[0-9]+)|(^[+-]?[0-9]+\\.[0-9]+)";
            if (!v1.matches(regularExpression) || !v2.matches(regularExpression)) {
                return "0.00%";
            }
            BigDecimal b1 = new BigDecimal(v1);
            BigDecimal b2 = new BigDecimal(v2);
            if (b2.compareTo(BigDecimal.ZERO) < 1){
                return "0.00%";
            }
            BigDecimal a=b1.divide(b2,4,BigDecimal.ROUND_HALF_UP);
            NumberFormat percent = NumberFormat.getPercentInstance();
            percent.setMaximumFractionDigits(2);
            percent.setMinimumFractionDigits(2);
            return percent.format(a.doubleValue());
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2,double类型的数,相除得到百分数 并四舍五入保留两位小数

      /**
         * 两个数相除,返回一个百分数
         * @param d1
         * @param d2
         * @return
         */
        public static String getRatio(Double d1, Double d2) {
            if (d1 == null || d2 == null || d2 <= 0) {
                return "0.00%";
            }
            NumberFormat percent = NumberFormat.getPercentInstance();
            percent.setMaximumFractionDigits(2);
            percent.setMinimumFractionDigits(2);
            return percent.format(d1/d2);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3,Integer类型的数,相除得到百分数 并四舍五入保留两位小数

       /**
         * 两个数相除,返回一个百分数
         * @param d1
         * @param d2
         * @return
         */
        public static String getRatio(Integer d1, Integer d2) {
            Log.info("getRatio d1"+d1);
            Log.info("getRatio d2"+d2);
            if (d1 == null || d2 == null || d2 <= 0) {
                return "0.00%";
            }
            NumberFormat percent = NumberFormat.getPercentInstance();
            percent.setMaximumFractionDigits(2);
            percent.setMinimumFractionDigits(2);
            return percent.format(d1/(d2*1.0));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4,compareTo方法如何使用?(比如想判断一个数是否小于等于0,那么b2.compareTo(BigDecimal.ZERO)后面应该是大于或者小于什么呢?)
    https://www.csdn.net/tags/MtTakg4sOTYzMTAtYmxvZwO0O0OO0O0O.html
    5,BigDecimal除法后保留两位小数
    https://blog.csdn.net/kk12927/article/details/122454757
    https://blog.csdn.net/weixin_45069056/article/details/122208952

    https://blog.csdn.net/yangguangniubi/article/details/118541574?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-3-118541574-null-null.pc_agg_new_rank&utm_term=java%E4%B8%A4%E4%B8%AAbigdecimal%E7%9B%B8%E9%99%A4&spm=1000.2123.3001.4430

    6,BigDecimal保留两位小数及格式化成百分比
    https://blog.csdn.net/m0_37044606/article/details/76461569
    https://blog.csdn.net/m0_37044606/article/details/76461569?utm_term=bigdecimal%E9%99%A4%E6%B3%95%E4%BF%9D%E7%95%99%E4%B8%A4%E4%BD%8D%E7%99%BE%E5%88%86%E6%AF%94&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-0-76461569-null-null&spm=3001.4430

    https://www.itdaan.com/blog/2017/07/31/c10a0a81e49e068f5a41477aed17afcf.html

  • 相关阅读:
    c/c++ 线程私有数据
    Excel vlookup 如何使用
    POJ 2155 Matrix 树状数组
    2022山东理工大学pta程序设计---实验六(二维数组)题解
    赤霉素3β-羟化酶的下调增强了大豆的光合作用并提高了种子产量
    使用 Node.js 和 Azure Function App 自动更新 Elasticsearch 索引
    邯郸百亿斤粮食生产 国稻种芯·中国水稻节:河北大市粮食经
    MySQL索引原理笔记
    SpringBoot 异步编程
    .NET 6 实现滑动验证码(九)、搭建验证码API服务端
  • 原文地址:https://blog.csdn.net/weixin_43228497/article/details/125886367