首页 > 代码库 > java操作Excel处理数字类型的精度损失问题验证
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.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
结论:
此场景无精度损失。
java操作Excel处理数字类型的精度损失问题验证
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。