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