java poi导入纯数字等格式问题及解决

网友投稿 594 2022-08-19


java poi导入纯数字等格式问题及解决

目录poi导入纯数字等问题poi获取Cell内容:数字之格式化原因DecimalFormat

poi导入纯数字等问题

用poi导出excel时候,如果单元格设置纯数字,输入的数据一旦过大就是自动显示成科学记数法,导致导入后的数据出错,解决方式,后台获取导出文件后,强制转换单元格属性,就能完美解决,也适用于其他单元格格式引起的数据导入异常

Cell cellCode = OYXIrHkTFr.getCell(1);

cellCode.setCellType(CellType.STRING);

info.setCode(r.getCell(1).getStringCellValue());

poi获取Cell内容:数字之格式化

今天,收到业务方的诉求,说是excel 导入的金额,全被四舍五入了。

然后查看了一下代码:初始的时候眼花缭乱,真的是看不下去。但是想一想,作为程序员,不能拒绝为人民服务。于是乎,debug 了一下。我也真是够懒的,不想直接追代码,debug去了……

原因

找到了具体的原因:

if (xssfRow.getCellType() == Cell.CELL_TYPE_NUMERIC) {

DecimalFormat format = new DecimalFormat("#");

double num = xssfRow.getNumericCellValue();

OYXIrHkTFString res = format.formathttp://(num);

//……

}

上面代码中,把数字格式化为整数了。当然,如果直接获取 value 也不会有问题。

如下:

if (xssfRow.getCellType() == Cell.CELL_TYPE_NUMERIC) {

DecimalFormat format = new DecimalFormat("#");

double num = xssfRow.getNumericCellValue();

String res = format.format(num);

// num 和 res 的取值差不多。 如: 50.00 : num 为 50.00,res 为 50; 123.23, num 为123.23, res为123.23

System.err.println(num + "--" + res);

//……

}

DecimalFormat

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。帮你用最快的速度将数字格式化为你需要的样子。DecimalFormat 包含一个模式 和一组符号 。

DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。像"####.000"的符号。这个模式意味着在小数点前有四个数字,如果不够就空着,小数点后有三位数字,不足用0补齐。

符号含义:

0 一个数字 # 一个数字,不包括 0 . 小数的分隔符的占位符 , 分组分隔符的占位符 - 缺省负数前缀。 % 乘以 100 和作为百分比显示

例子:

public static void main(String[] args) {

double pi=3.1415927;//圆周率

//取一位整数

System.out.println(new DecimalFormat("0").format(pi));//3

//取一位整数和两位小数

System.out.println(new DecimalFormat("0.00").format(pi));//3.14

//取两位整数和三位小数,整数不足部分以0填补。

System.out.println(new DecimalFormat("00.000").format(pi));//03.142

//取所有整数部分

System.out.println(new DecimalFormat("#").format(pi));//3

//以百分比方式计数,并取两位小数

System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%

long c=299792458;//光速

//显示为科学计数法,并取五位小数

System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8

//显示为两位整数的科学计数法,并取四位小数

System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7

//每三位以逗号进行分隔。

System.out.println(new DecimalFormat(",###").format(c));//299,792,458

System.out.println(new DecimalFormat("-###").format(c));//299,792,458

System.out.println(new DecimalFormat("#.##?").format(c));//299,792,458

//将格式嵌入文本

System.out.println(new DecimalFormat("光速大小为每秒,###米").format(c)); //光速大小为每秒299,792,458米

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springMVC中的view视图详细解析
下一篇:阿里nacos+springboot+dubbo2.7.3统一处理异常的两种方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~