java poi导入纯数字等格式问题及解决
作者:linge__ 发布时间:2023-04-14 08:50:30
标签:java,poi,导入,纯数字
poi导入纯数字等问题
用poi导出excel时候,如果单元格设置纯数字,输入的数据一旦过大就是自动显示成科学记数法,导致导入后的数据出错,解决方式,后台获取导出文件后,强制转换单元格属性,就能完美解决,也适用于其他单元格格式引起的数据导入异常
Cell cellCode = r.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();
String res = format.format(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米
}
来源:https://blog.csdn.net/weixin_37497666/article/details/78921443


猜你喜欢
- 本文实例讲述了C#实现HSL颜色值转换为RGB的方法。分享给大家供大家参考。具体实现方法如下://This method converts
- 以下实例演示了如何通过 Collections 类的 Collections.max() 和 Collections.min() 方法来查找
- 如何解决Mybatis--java.lang.IllegalArgumentException: Result Maps collection already contains value for X这两天因为项目需要整合spring、struts2、mybatis三大框架,但启动的时候总出现这个错误,困扰我好久,在网上找到的答案都不是我
- 一、前言Android实现圆角矩形,圆形或者椭圆等图形,一般主要是个自定义View加上使用Xfermode实现的。实现圆角图片的方法其实不少
- logback过滤部分日志输出场景使用监控异常日志进行告警时,部分异常日志可能只是不需要告警,但无法通过编码去除时,可以通过不输出这类异常日
- 本文将是JVM 性能优化系列的第二篇文章(第一篇:传送门),Java 编译器将是本文讨论的核心内容。本文中,作者(Eva Andreasso
- 前言开发中,免不了会用到多边形、多角星等图案,比较常用的多边形比如雷达图、多角星比如评价星级的五角星等,本篇文章就使用Flutter绘制封装
- 一、什么是并查集对于一种数据结构,肯定是有自己的应用场景和特性,那么并查集是处理什么问题的呢?并查集是一种树型的数据结构,用于处理一些不相交
- 前言通过ioctl跟binder驱动交互,实现以最快的方式唤醒新的保活服务,最大程度防止保活失败。同时,我也将跟您分享,我是怎么做到在不甚了
- /*** 目的:实现AVL* 利用数组对左右儿子简化代码,但是对脑力难度反而增大不少,只适合acm模板* 其实
- 前言Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBa
- Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计
- 异常算术异常类:ArithmeticExecption空指针异常类:NullPointerException类型强制转换异常:ClassCa
- 本文实例讲述了Android监听手机电话状态与发送邮件通知来电号码的方法。分享给大家供大家参考,具体如下:在android中可以用Phone
- Spring Data Jpa 自定义方法的实现最近项目中用到了Spring Data JPA,在里面我继承了一个PagingAndSort
- 这周在做公司的一个C#项目中,要写一个webservice提供一个下载方法,之前公司有过,但是要整改,于是这种鸟屎摊子又交给了我,其中一个密
- 编译Android系统APK1、设置环境export ANDROID_HOME=/home/administrator/soft/andro
- 一、项目简述本系统功能包括:数据统计、收件录入、发件录入、到件录入、派件录入、问题件录入、退件录入、留仓录入、装车录入、发车录入、到车录入、
- 前段时间写了一篇C#解析Lrc歌词文件,对lrc文件进行解析,支持多个时间段合并。本文借下载歌词文件来探讨一下同步和异步方法。 L
- HashMap的实现原理首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素(key-value)时,就首先计算元素key的h