excel数据导入表中,百分号怎么处理
-
excel抽到表中,设置表格样式
XSSFDataFor matfmt=(XSSFDataFormat)wb.createDataFormat();
XSSFCellStyle style=(XSSFCellStyle)wb.createCellStyle();
style.setAlignment(HorizontalAlignment.RIGHT);
style.setDataFormat(fmt.getFormat("#,##0.00"));//带小数数值
--style.setDataFormat(fmt.getFormat("#,##0"));//整数数值
-
将百分数变成小数
String deci=batchs.get(i).get(fi.getSourceIndex()); //拿到当前数据
BigDecimal bigDecimal;
try{
if(StringUtil.isNotBlank(deci)){
deci=StringUtil.trim(deci).replaceAll(",",""); //清除千分位,用空串代替逗号
if(deci.contains(",")){ //如果包含,用空串代替逗号,再用空串替换多个空格
deci=deci.replace(",","").replace(" ","");
}
if(deci.endsWith("%")){ //如果数字以百分号结尾,用空串代替百分号
deci=deci.replace("%","");
bigDecimal=newBigDecimal(deci);
deci=bigDecimal.multiply(newBigDecimal("0.01")).toString(); //当前去掉百分号的数据*0.01
}
bigDecimal=newBigDecimal(deci);
ps.setBigDecimal(findex,bigDecimal);
}else{
if(StringUtil.isY(JesConfig.getConfigValue("OWL.EXTRACT_TASK_NUMBER_VALUE_SET_NULL","N"))){
ps.setBigDecimal(findex,null);
}else{
ps.setBigDecimal(findex,BigDecimal.ZERO);
}
}
}catch(NumberFormatExceptione){
logger.warn("这条数据{"+batchs.get(i)+"}格式错误:字段"+fi.getName()+"是数值类型,但输入值是"+deci+",该值将以0抽取。");
invalidRows++;
if(invalidRowsFile!=null){
try{
invalidRowsFile.append(batchs.get(i).toString());
}catch(IOExceptionex){
logger.error("写入无效数据文件时失败:"+batchs.get(i));
}
}
ps.setBigDecimal(findex,BigDecimal.ZERO);
}
-
replace、replaceAll、replaceFirst
- replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);
- replaceAll的参数是regex,即基于规则表达式的替换,比如:可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号;
-
相同点:都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串;
不同点:replaceAll支持正则表达式,因此会对参数进行解析(两个参数均是),如replaceAll("\\d", "*"),而replace则不会,replace("\\d","*")就是替换"\\d"的字符串,而不会解析为正则。
-
另外还有一个不同点:“\”在java中是一个转义字符,所以需要用两个代表一个。例如System.out.println( "\\" ) ;只打印出一个"\"。但是“\”也是正则表达式中的转义字符,需要用两个代表一个。所以:\\\\被java转换成\\,\\又被正则表达式转换成\,因此用replaceAll替换“\”为"\\",就要用replaceAll("\\\\","\\\\\\\\"),而replace则replace("\\","\\\\")。
如果只想替换第一次出现的,可以使用replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串。
-
multiply 在此处为乘法,这里介绍加减乘除以及使用方法
- 对于常用的加,减,乘,除,BigDecimal类提供了相应的成员方法。
-
public BigDecimal add(BigDecimal value);//加法
public BigDecimal subtract(BigDecimal value); //减法
public BigDecimal multiply(BigDecimal value); //乘法
public BigDecimal divide(BigDecimal value); //除法
进行相应的计算后,我们可能需要将BigDecimal对象转换成相应的基本数据类型的变量,可以使用floatValue(),doubleValue()等方法。
//加法
public static double add(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.add(b2).doubleValue();
}
//减法
public static double sub(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.subtract(b2).doubleValue();
}
//乘法
public static double mul(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.multiply(b2).doubleValue();
}
//除法
public static double div(double value1,double value2,int scale) throws IllegalAccessException{
//如果精确范围小于0,抛出异常信息
if(scale<0){
throw new IllegalAccessException("精确度不能小于0");
}
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.divide(b2, scale).doubleValue();
}