运维开发网

将纯数字格式导入Java和POI的问题

运维开发网 https://www.qedev.com 2022-07-06 21:22 出处:网络
这篇文章主要介绍了java?poi导入纯数字等格式问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

这篇文章主要介绍了java?poi导入纯数字等格式问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


poi导入纯数字等问题

用poi导出excel时,如果单元格设置了纯数字,一旦输入数据过大,就会自动显示为科学记数法,导致导入的数据出现错误。解决方案,在后台获得导出的文件后,通过强制改变单元格的属性就可以完美解决。也适用于其他单元格格式导致的数据导入异常。

Cell cellCode = r.getCell(1);cellCode.setCellType(CellType.STRING); info.setCode(r.getCell(1).getStringCellValue());


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

今天收到业务方的请求,说excel导入的金额四舍五入。

然后我查了一下代码:刚开始看的眼花缭乱,实在看不下去。但是仔细想想。作为一名程序员,你不能拒绝为人民服务。结果,它被调试了。我太懒了,不想直接追代码。debug去了helliphellip


原因

找到具体原因:

if (xssfRow.getCellType() == Cell.CELL_TYPE_NUMERIC) { DecimalFormat format = new DecimalFormat("#"); double num = xssfRow.getNumericCellValue(); String res = format.format(num); //……}

在上面的代码中,数字被格式化为整数。当然,如果直接获得价值,也不会有问题。

如下所示:

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占位符来指定数字的长度。像quot# # # # .000quot的象征。这种模式意味着小数点前有四位,不够的话还有空,小数点后有三位,不够的用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米 }

以上个人经验,希望能给你一个参考

0

精彩评论

暂无评论...
验证码 换一张
取 消