java操作Excel处理数字类型的精度损失问题验证
java操作Excel处理数字类型的精度损失问题验证:
场景:
CELL_TYPE_NUMERIC-->CELL_TYPE_STRING--->CELL_TYPE_NUMERIC
POI版本:
poi-3.10.1
poi-3.9
Code:
package poi; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; public class DoubleWithStringNumeric { private static final String excelName="DoubleWithStringNumberic.xls";
public static void main(String[] args) throws IOException {
int double_idx=0;
int double2String_idx=1;
int string2double_idx=2;
Workbook wb=new HSSFWorkbook();
Sheet sheet=wb.createSheet("DoubleWithStringNumberic");
Row row=sheet.createRow(1);
Cell cell=row.createCell(double_idx);
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
cell.setCellValue(99.333333); persistWorkbook(wb); travelSheet(); System.out.println("Type: CELL_TYPE_NUMERIC==>CELL_TYPE_STRING");
InputStream s=new FileInputStream(excelName);
wb=new HSSFWorkbook(s);
sheet=wb.getSheetAt(0);
row=sheet.getRow(1);
cell=row.getCell(0);
Double d=cell.getNumericCellValue(); cell=row.createCell(double2String_idx);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(String.valueOf(d)); persistWorkbook(wb);
s.close(); travelSheet(); System.out.println("Type: CELL_TYPE_STRING==>CELL_TYPE_NUMERIC");
s=new FileInputStream(excelName);
wb=new HSSFWorkbook(s);
sheet=wb.getSheetAt(0);
row=sheet.getRow(1);
cell=row.getCell(double2String_idx);
String double2String=cell.getStringCellValue();
cell=row.createCell(string2double_idx);
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
cell.setCellValue(Double.parseDouble(double2String));
persistWorkbook(wb);
s.close(); travelSheet(); } private static void travelSheet() throws FileNotFoundException, IOException {
Workbook wb;
Sheet sheet;
InputStream s=new FileInputStream(excelName);
wb=new HSSFWorkbook(s);
sheet=wb.getSheetAt(0);
for (Row row_temp : sheet) {
for (Cell cell_temp : row_temp) {
getCellValue(cell_temp);
}
}
s.close();
} private static void getCellValue(Cell cell) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
System.out.println("CELL_TYPE_NUMERIC:"+cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
String stringCellValue = cell.getStringCellValue();
System.out.println("CELL_TYPE_STRING:"+stringCellValue);
System.out.println("toDouble:"+Double.parseDouble(stringCellValue));
break;
default:
System.out.println("error");
break;
} } private static void persistWorkbook(Workbook wb)
throws FileNotFoundException, IOException {
OutputStream stream=new FileOutputStream(excelName);
wb.write(stream);
stream.flush();
stream.close();
} }
Output:
CELL_TYPE_NUMERIC:99.333333
Type: CELL_TYPE_NUMERIC==>CELL_TYPE_STRING
CELL_TYPE_NUMERIC:99.333333
CELL_TYPE_STRING:99.333333
toDouble:99.333333
Type: CELL_TYPE_STRING==>CELL_TYPE_NUMERIC
CELL_TYPE_NUMERIC:99.333333
CELL_TYPE_STRING:99.333333
toDouble:99.333333
CELL_TYPE_NUMERIC:99.333333
结论:
此场景无精度损失。
java操作Excel处理数字类型的精度损失问题验证的更多相关文章
- java操作Excel、PDF文件
java操作Excel.PDF文件 分享者:Vashon 分享来源:CSDN博客 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的 ...
- java操作excel 工具类
java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...
- Java操作Excel文件以及在Android中的应用
本文章由临江仙原创,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/10286563 Excel作为一种有格式的文件,可以使用Java来对 ...
- Java 操作 EXCEL
今天帮朋友写了一段用来处理EXCEL内容的程序,在这里记录下自己的学习过程.主要是对EXCEL表格中的内容做分类和统计,使用计算机来做这种重复的机械性地工作再好不过了.首先,我们需要下载一个java操 ...
- JAVA操作Excel时文字自适应单元格的宽度设置方法
使用JAVA操作Excel通常都使用JXL,方法很简单网上也有很多的教程,然后往往一些细节性的问题却导致我们这些Programmer苦恼不已.这两天帮一个朋友做一个Excel表格自动生成的小软件,就遇 ...
- jxl的使用总结(java操作excel)
jxl.jar是通过java操作excel表格的工具类库: jxl.jar包:链接:http://pan.baidu.com/s/1o8qFJHw 密码:5jyq 1:通过模拟实现创建一个表格,然后模 ...
- 【转载】jxl的使用总结(java操作excel)
jxl.jar是通过java操作excel表格的工具类库: 链接:https://pan.baidu.com/s/1AAT_eA_Q47zFeQohap6eQg 提取码:777b 1:通过模拟实现创建 ...
- java操作excel文件
采用POI操作excel API:http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html poi包:http ...
- java操作excel总结---poi
前不久做过Excel的导入导出功能,其主要的难点是java如何操作Excel文档.现在就来介绍一下利用Apache的poi如何操作Excel. 1.准备工作:导入Apache POI的相关jar包,P ...
随机推荐
- for语句的嵌套(示例及练习)
for(初始条件:循环条件:状态改变) {for(初始条件:循环条件:状态改变) { 循环体 }} 一般,用来解决循环的方法:穷举法.迭代法. 示例一:阶乘的和 示例二: 练习一:兔 ...
- TextView实现多个TextView对象的走马灯效果
1:自定义一个控件继承TextView,重写isFocused方法,返回值为true; package com.example.helloandroid; import android.R.bool; ...
- 一个简单链表的C++实现(二)
/* LList.cpp * Author: Qiang Xiao * Time: 2015-07-12 */ #include<iostream> using namespace std ...
- C++之对象组合
#include<stdio.h>//初始化列表 提供了对成员变量初始化的方式//Constructor class M { private: ...
- BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
数据 n <= 30000 , 然后 O( n² ) 的贪心也过了..... USACO 数据是有多弱啊 = = ( ps : BZOJ 1640 和此题一模一样 , 双倍经验 ) ------ ...
- poj3693之后缀数组
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5946 Accepted: 1799 Description The r ...
- 完全掌握KMP算法思想
文档下载页面http://download.csdn.net/detail/yedeqixian/4209500 80页在讲KMP算法的开始先举了个例子,让我们对KMP的基本思想有了最初的认 ...
- 无法将类型“ASP.login_aspx”转换为“System.Web.UI.WebControls.Login”
今天碰上了一个很傻的问题,起码我认为是这样. 项目中首页名是:Login.aspx,编译.运行都没有出现问题. 于是打包发布网站,各项内容都配置好后,问题出现了.一运行首页面就出现下面这个错误: 编译 ...
- 字符串操作函数<string.h>相关函数strcpy,strcat,等源码。
首先说一下源码到底在哪里找. 我们在文件中包含<cstring>时,如果点击右键打开文档, 会打开cstring,我们会发现路径为: D:\Program Files\visual stu ...
- [K/3Cloud] 如何从被调用的动态表单界面返回数据
在需要返回数据的地方调用表单返回方法完成数据返回 this.View.ReturnToParentWindow(retData); 在调用界面的回调函数中取出返回结果的ReturnData即可使用. ...