poi导入纯数字等问题
用poi导出excel时候,如果单元格设置纯数字,输入的数据一旦过大就是自动显示成科学记数法,导致导入后的数据出错,解决方式,后台获取导出文件后,强制转换单元格属性,就能完美解决,也适用于其他单元格格式引起的数据导入异常
1
2
3
|
Cell cellCode = r.getCell( 1 ); cellCode.setCellType(CellType.STRING); info.setCode(r.getCell( 1 ).getStringCellValue()); |
poi获取Cell内容:数字之格式化
今天,收到业务方的诉求,说是excel 导入的金额,全被四舍五入了。
然后查看了一下代码:初始的时候眼花缭乱,真的是看不下去。但是想一想,作为程序员,不能拒绝为人民服务。于是乎,debug 了一下。我也真是够懒的,不想直接追代码,debug去了……
原因
找到了具体的原因:
1
2
3
4
5
6
|
if (xssfRow.getCellType() == Cell.CELL_TYPE_NUMERIC) { DecimalFormat format = new DecimalFormat( "#" ); double num = xssfRow.getNumericCellValue(); String res = format.format(num); //…… } |
上面代码中,把数字格式化为整数了。当然,如果直接获取 value 也不会有问题。
如下:
1
2
3
4
5
6
7
8
|
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 和作为百分比显示
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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米 } |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_37497666/article/details/78921443