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

结论:

此场景无精度损失。

 

时间: 2025-01-03 20:07:47

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

Java操作Excel的2种方法--Poi,jExcelApi

老师让查一些java操作excel的方法,在网上查了半天,看的也不太懂,就把有价值的总结一下. 发现java操作Excel的第三方jar包比较多,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI. 一.jExcelAPI jExcelAPI是一个韩国程序员的作品,虽然没有POI那样血统高贵,但是在笔者的使用过程中,感觉简单方便,对中文支持非常好,功能也比较强大.它的下载地址是:http://www.andykhan.com/jexcelapi/   它的特征有如下描述:

Java 操作 Excel

原文: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后缀)

java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件,颜色会出错

问题描述 java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件,颜色会出错 程序代码如下: public class Main { public static void main(String[] args) { try { InputStream fis1 = new FileInputStream("D:/fei/testfiles/2G囤卡量.xls"); InputStream fis2 = new FileInputStream(&quo

NoSQL之Redis(二)---Java操作Redis存储自定义类型数据

NoSQL之Redis(二)---Java操作Redis存储自定义类型数据            Redis简介            Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案.            Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久性. 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型. Redis可以将数据复制到任意数量的从服务器.           

java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件

问题描述 java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件 java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件有3个list 解决方案 当个excel文件是只有一个sheet的吗,如果是的话,可以逐个遍历Excel文件,获取这个文件的sheet后,直接添加到一个空白excel文档中就可以了. 了解下jxl的api,这个需求实现应该不复杂的.

java操作excel使用jxl如何控制数据行数

问题描述 java操作excel使用jxl如何控制数据行数 java操作excel使用jxl如何控制数据行数,当数据量达到1000条,就新建一个excel,不是新建excel中的sheet表哦!如何实现?文件名称会怎么变化呢?求助! 解决方案 http://blog.csdn.net/yhawaii/article/details/6927927 解决方案二: java 使用jxl 操作Excel在java中使用jxl操作excelJAVA中使用JXL操作EXCEL

jxl的使用总结(java操作excel)

jxl.jar是通过java操作excel表格的工具类库: jxl.jar包:链接:http://pan.baidu.com/s/1o8qFJHw 密码:5jyq  1:通过模拟实现创建一个表格,然后模拟添加到表格中数据,实际开发过程中都是通过从数据库导入到表格中的数据 1 package com.bie; 2 3 import java.io.File; 4 import java.io.IOException; 5 6 import jxl.Workbook; 7 import jxl.wr

java操作excel的方法_java

本文实例讲述了java操作excel的方法.分享给大家供大家参考.具体如下: WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\output.xls")); WritableSheet sheet = workbook.createSheet("项目简报", 0); //样式 WritableFont sonti18font = new WritableFont(WritableFon

利用java操作Excel文件的方法_java

很久以来都想研究一下利用java操作Excel的方法,今天没事,就稍微了解了一下,特总结一下.利用java操作Excel,有个开源的东东-jxl.jar,可以到http://sourceforge.net/projects/jexcelapi/files/下载. 一.读取Excel文件内容 复制代码 代码如下: /** *//**读取Excel文件的内容     * @param file  待读取的文件     * @return     */    public static String