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米
	}

参考:

http://www.cnblogs.com/lsun/archive/2011/06/22/2087116.html

https://www.cnblogs.com/hq233/p/6539107.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值