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

结论:

此场景无精度损失。

时间: 2024-10-15 21:23:26

java操作Excel处理数字类型的精度损失问题验证的相关文章

java 操作 Excel,java导出excel

WritableWorkbook out = null; try { response.getServletResponse().reset(); ((HttpServletResponse) response.getServletResponse()).setHeader("Content-Disposition", "attachment;filename=export.xls"); response.getServletResponse().setConten

java操作Excel

一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象.它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等. 二.HSSF概况 HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”.也许HSSF的名字有点

Java 操作 Excel

这次的任务是实现数据的导入/导出功能,就是用Java操作Excel,上网找了一下,就Java来说用Apache的POI库的比较多,功能也相对比较强大.其他Excel开发库: http://www.oschina.net/project/tag/258/excel-tools Apache POI 下载地址: http://poi.apache.org/download.html 废话不多说,直接给几个例子就了解怎么用了. Excel 2003 (xls后缀) 1 import java.io.F

Java 操作 Excel (读取Excel2007,Poi实现)

关于Java读取Excel2007的文章在Google.百度上搜索一下,没有太好的例子,实现的也不算太好.查看了一下Poi,最新的 POI 3.5 beta 4 支持读写 Excel2007和PPT2007(XLSX and PPTX),自己来实现Java读取Excel2007了. 1,下载 POI 3.5 beta 4 解压,把其中的jar包导入项目文件.以我的读取为例,导入了以下jar包.  没有配置 log4j,测试时报告警报信息,应该为加载顺序导致的初始化问题造成(暂时没有找原因). 2

java 操作excel 文件

JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表.因为它是使用Java编写的,所以我们在Web应用中可以通过JSP.Servlet来调用API实现对Excel数据表的访问. 下载: 官方网站 http://www.andykhan.com/jexcelapi/ 下载最新版本(本人下的是jexcelapi_2_6

Java操作excel表格

最近老师布置了个任务,用Java对excel后缀名为xlsx的文件进行简单的增,删,改,查操作:虽说是个简单的程序,可作为刚接触的我来说还是有些磕磕碰碰.不过好在还是完成了,进行一个简单的总结. 首先导入了一个poi.jar 网上有很多这个资源可以下载 XSSFSheet sheet=null;XSSFWorkbook book=null; 一:查  (查找本地指定位置的excel表格,在控制台输出) public void print_excel(){ //获取excel表格的行数 int l

java操作Excel工具类分享

import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import org.apache.poi.hssf.usermodel.HS

Java操作Excel之POI简单例子

21 /** 22 * 利用POI操作Excel表单 23 * 24 * 需要jar包: 25 * HSSF针对03及以前版本,即.xls后缀 26 * |---poi-3.16.jar 27 * XSSF针对07及以后版本,即xlsx后缀 28 * |---poi-3.16.jar 29 * |---poi-ooxml.3.16.jar 30 * |---poi-ooxml-schemas-3.16.jar 31 * |---xmlbeans-2.6.0.jar 32 * |---common

Java操作Excel学习

一. POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 二. HSSF概况 HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取.写入.修改Excel文件.HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即"用户模型"和"事件-用户模型". 三. POI