Vấn đề hiển thị số thập phân và mượn Excel API POI để tính giá trị xác suất trong Java

dt2it153

Member
14/7/11
92
2
8
nhà tui ^^
Hi mọi người, mình có 2 vấn đề nho nhỏ cần thỉnh giáo:
1/ Hiển thị số thập phân: Số là mình có 3 biến như sau được khai báo kiểu int:
PHP:
float te = 0, variance = 0;
int opt_time = rs.getInt("Optimistic_Time");
int normal_time = rs.getInt("Normal_Time");
int pess_time = rs.getInt("Pessimistic_Time");
te = (float)((opt_time + 4*normal_time + pess_time)/6);
variance = (float)((pess_time - opt_time)/6);
Bây giờ vấn đề mình in ra te và variance nó chỉ ra có dạng như sau, mà không có số lẻ thập phân phía sau: 6.0, 3.0,...... Trong khi theo mình nghĩ là nó phải có dạng: 6.12323, .... vì trong phép tính có xuất hiện phần (/6) mà. Vậy tại sao nó chỉ ra như vậy?
Kiểu của te và variance trong database dùng MSSQL Server mình để là float. Sau khi tính xong trong code mình update các giá trị te và variance vào CSDL, nhưng trong database nó lưu cứ y như là int, bỏ luôn cả phần .0 ngoài sau luôn?!?

2/ Về API POI excel để tính giá trị xác suất
Dưới đây là 1 class gồm 1 method để tính xác suất thông qua API POI:
PHP:
public class ExcelAPI {

    protected static double calProbability(double Z) {
        double a = 0;
        Workbook wb = new XSSFWorkbook();
        CreationHelper createHelper = wb.getCreationHelper();
        Sheet sheet = wb.createSheet("new sheet");

// Create a row and put some cells in it. Rows are 0 based.
        Row row = sheet.createRow((short) 0);
// Create a cell and put a value in it.
        Cell cell = row.createCell(0);
        //cell.setCellValue(1);
        cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
        cell.setCellFormula("NORMSDIST(" + Z + ")");
// Or do it on one line.
//        row.createCell(1).setCellValue(1.2);
//        row.createCell(2).setCellValue(
//                createHelper.createRichTextString("This is a string"));
//        row.createCell(3).setCellValue(true);
 
    if(cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
        System.out.println("Formula is " + cell.getCellFormula());
        switch(cell.getCachedFormulaResultType()) {
            case Cell.CELL_TYPE_NUMERIC:
                System.out.println("Last evaluated as: " + cell.getNumericCellValue());
                a = cell.getNumericCellValue();
                break;
            case Cell.CELL_TYPE_STRING:
                System.out.println("Last evaluated as \"" + cell.getRichStringCellValue() + "\"");
                break;
        }
    }

// Write the output to a file
        FileOutputStream fileOut;
        try {
            fileOut = new FileOutputStream("workbook.xlsx");
            wb.write(fileOut);
            fileOut.close();
        } catch (IOException ex) {
            Logger.getLogger(ExcelAPI.class.getName()).log(Level.SEVERE, null, ex);
        }
        return a;
    }

}
Trong đó có đoạn này
PHP:
Cell cell = row.createCell(0);
cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("NORMSDIST(" + Z + ")");
là dùng hàm NORMSDIST(Z) trong excel để tính ra giá trị xác suất. Với Z sẽ được mình truyền vào khi gọi hàm này.

Sau khi chạy chương trình xong, mình nhận được output của những cái mình in ra như sau:
Code:
Formula is NORMDIST(3.0)
Last evaluated as: 0.0
Mà giá trị của hàm trên tính trong excel sẽ được: 0.998650102.
Lại là vấn đề về hiển thị phần số lẻ thập phân, hay do mình tính chưa đúng? Cái biến được dùng để chứa là a có kiểu double trong phần class mình post ở trên.

Các bạn nào đã dùng hoặc mọi người có cao kiến gì chỉ giúp mình? Mình sắp fai đem cái này ra để bị chặt chém rồi. Thanks!
 

dt2it153

Member
14/7/11
92
2
8
nhà tui ^^
Mình đã sửa được phần hiển thị và lưu số có phần lẻ thập phân rồi.
Còn phần mượn Excel API POI để tính xác suất thì có trục trặc này hơi khó hiểu. @@
Sau khi chạy code class phía trên để get về giá trị xác suất tính được, có điều lạ là giá trị mình get từ dòng này:
PHP:
System.out.println("Last evaluated as: " + cell.getNumericCellValue());
a = cell.getNumericCellValue();
lúc nào nó cũng ra 0.0 ?!?
Mặc dù mình mở xem file excel xuất ra, workbook.xlsx thì giá trị tính lại đúng, chứ không phải 0.0.
Tại sao nó không get lấy ra giá trị như trong đó?
Phần code lấy ra value từ ô excel chứa công thức tính xác suất đó mình search từ Google và cũng từ trang guide của API POI đó. Hix.
Làm sao để nó get về đúng giá trị nó được tính trong file excel mà mình xuất ra đây??
 

dt2it153

Member
14/7/11
92
2
8
nhà tui ^^
Em đang vội a JackV ơi. Mai báo cáo xong em sẽ lên post bài đã giải quyết vấn đề như thế nào nghiêm túc. Em vẫn chưa get được giá trị của nó, điên mất thôi :((