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

1,数字类型的字符串,相除得到百分数 并四舍五入保留两位小数的通用方法 (注意的点:1,如何判断字符串是合法的数字–包括小数,正负数(看下面代码中的正则表达式,

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

那用正则表达式效率不高,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;}

可以看到:是判断每位是否是数字,那么改进一下这个方法:当有小数点或者正负号的时候,不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());}

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);}

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));}

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