首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

POI将小数写入EXCEL,1.01变成1.00999999046325,该怎么解决

2012-02-16 
POI将小数写入EXCEL,1.01变成1.00999999046325Java code public static boolean CreateExcel(){String Fil

POI将小数写入EXCEL,1.01变成1.00999999046325

Java code
 public static boolean CreateExcel()    {        String FileName;        FileName = "";        FileOutputStream fileOut = null;        try        {            HSSFWorkbook wb = new HSSFWorkbook();            HSSFSheet sheet = wb.createSheet();            wb.setSheetName(0,"测试",HSSFWorkbook.ENCODING_UTF_16);             HSSFRow row0 = sheet.createRow(0);            HSSFRow row1 = sheet.createRow(1);                       String strf = "1.01";            float f = Float.valueOf(strf).floatValue();              HSSFCell cell = row0.createCell((short)0);                        cell.setCellValue( strf); //这个是字符的1.01,导出后每次都得手工改成数字型                       cell = row1.createCell((short)0);            cell.setCellValue( f); //单元格里看到的是1.01,但实际值却是1.00999999046325 ,数据多时,恐有误差。                       String filepath = "c:\\poi.xls";                      fileOut = new FileOutputStream(filepath);            wb.write(fileOut);            fileOut.flush();            fileOut.close();        }        catch(Exception ex)        {            ex.printStackTrace();            return false;        }        finally        {            try            {                fileOut.close();            }            catch(Exception e)            {                e.printStackTrace();            }        }        return true;    } 


[解决办法]
如果你对数值的精确度有比较高的要求,那么就不要用float类型,java里面的float类型是有误差的,用BigDecimal比较靠谱
[解决办法]
写入之前输出一下吧,如果输入之前就已经改变的话那就合poi没关系了。
像楼上说的推荐用BigDecimal,float有误差。
嫌麻烦的话直接用字符串!
[解决办法]
有金额,或小数点位要求精度高时不用float,也不用double
用BigDecimal。
[解决办法]
float f = Float.valueOf(strf).floatValue();
换成如下形式:
BigDecimal f = BigDecimal(strf);
[解决办法]
float 和 double 都是会这样的 并不是POI的原因 不信你可以输出一下, 我之前从数据库里读出数据也遇到过。你可以转换成String.
[解决办法]
精度范围问题。。用double应该能搞定。。
[解决办法]
我更建议你直接使用字符串,而不是转换数据类型。

热点排行