博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java操作Excel处理数字类型的精度损失问题验证
阅读量:6633 次
发布时间:2019-06-25

本文共 3793 字,大约阅读时间需要 12 分钟。

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.333333Type: CELL_TYPE_NUMERIC==>CELL_TYPE_STRINGCELL_TYPE_NUMERIC:99.333333CELL_TYPE_STRING:99.333333toDouble:99.333333Type: CELL_TYPE_STRING==>CELL_TYPE_NUMERICCELL_TYPE_NUMERIC:99.333333CELL_TYPE_STRING:99.333333toDouble:99.333333CELL_TYPE_NUMERIC:99.333333

结论:

此场景无精度损失。

 

转载于:https://www.cnblogs.com/softidea/p/4205595.html

你可能感兴趣的文章
iOS - Mac OS X 终端命令
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.5.10
查看>>
一:解决VirtualBox只能安装32位系统的问题
查看>>
<七>面向对象分析之UML核心元素之包
查看>>
容器生态系统 - 每天5分钟玩转容器技术(2)
查看>>
Excel 当前行高亮
查看>>
ABP Zero 本地化语言的初始化和扩展
查看>>
java只有值传递,不存在引用传递
查看>>
看 nova-scheduler 如何选择计算节点 - 每天5分钟玩转 OpenStack(27)
查看>>
[常微分方程]2014-2015-2第7教学周第1次课讲义 3.2 解的延拓
查看>>
OCP如何查看历史成绩(2)
查看>>
【故障处理】序列cache值过小导致CPU利用率过高
查看>>
智能农业物联网系统功能分析
查看>>
Perfect Squares
查看>>
美国之行第五天(r12笔记第5天)
查看>>
SAP LSMW Batch Input不能支持MEK1事务代码!
查看>>
C# 通过HttpWebRequest在后台对WebService进行调用
查看>>
南宋词人之蒋捷
查看>>
梁春晓:互联网时代的社会创新与新公益形态
查看>>
在工作中感受电子政务建设的发展
查看>>