填充最后一位数为零

时间:2017-07-17 08:45:48

标签: java excel

如何在excel文件的最后一位添加

我通过下面的代码打印下面的值

DecimalFormat df = new DecimalFormat("#.00"); 
System.out.println(s.getNetAmount());
System.out.println(df.format(s.getNetAmount()));

,结果是

691.200
691.20

但是当我把它写入excel文件时,我希望得到 691.20 ,但我得到691.2。

这是我写入excel文件的方式

      public void write(List<? extends List> list) throws Exception {

            if (list != null) {
                try {
                    writeFile(header(), detail(list.get(0)));
                } catch (BatchRunException ex) {
                    throw new BatchRunException(" Fail..." + ex);
                }
            }
        }

 private void writeFile(String header, List<String> detail) throws IOException, BatchRunException {

        String fullPath = outputPath + fileNameFormat;

        File file = new File(fullPath);
        File path = new File(outputPath);

        if (!path.exists()) {
            path.mkdirs();
        }

        if (!file.exists()) {
            file.createNewFile();
        }

        try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
            bw.write(header);
            bw.write(NEW_LINE);

            for (String s : detail) {

                bw.write(s);
                bw.write(NEW_LINE);
            }


        } catch (IOException ex) {
            throw new BatchRunException(" Fail..." + ex);
        }
    }

    private String header() {
        StringBuilder bf = new StringBuilder();

        bf.append("Employee Name").append(SEPERATOR);
        bf.append("Amount").append(SEPERATOR);
        return bf.toString();
    }

    private List<String> detail(List<SettlementList> dList) {
        List<String> list = new ArrayList();
        BigDecimal a = new BigDecimal("0");

        for (SettlementList s : dList) {
            StringBuilder bf = new StringBuilder();

            bf.append(s.Name()).append(SEPERATOR);
            bf.append(s.getNetAmount()).append(SEPERATOR); // here the error
            list.add(bf.toString());    
        }

        return list;
    }

2 个答案:

答案 0 :(得分:2)

这是因为Cell样式而不是DecimalFormat。尝试设置单元格样式,例如:

HSSFCell cell = row.createCell(0);
HSSFCellStyle style = workbook.createCellStyle();
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
cell.setCellValue(s.getNetAmount().doubleValue());

<强>更新

看起来您正在写入csv文件并尝试使用xls打开它。在这种情况下,Excel将根据数据格式化单元格。因此,对于值为691.200的行,Excel会将这些值解释为数值并相应地对其进行格式化(使其成为691.2)。有两种方法可以解决它:

  1. 使用Apache POI库(此处为示例)写入xls而不是csv并根据上面的代码段应用单元格格式
  2. 使用Strings这些数字写入csv,在Excel中打开并对相应的列应用Text格式。

答案 1 :(得分:0)

format your cell with this configuration

选择您的单元格并右键单击它,然后单击格式化单元格并执行此配置,然后单击确定