2013-01-10 22 views
6

Tôi đang thử các phương pháp và chức năng của lớp NumberFormat và tôi đã đạt đến kết quả lạ. Tôi biên dịch và chạy chương trình sau đây:NumberFormat setMaximumFractionDigits method

public static void main(String[] args) { 

Locale loc = Locale.US; 
    NumberFormat nf = NumberFormat.getInstance(loc); 
    System.out.println("Max: "+nf.getMaximumFractionDigits()); 
    System.out.println("Min: "+nf.getMinimumFractionDigits()); 
    try { 
     Number d = nf.parse("4527.9997539"); 
     System.out.println(d); 
     // nf.setMaximumFractionDigits(4); 
     System.out.println(nf.format(4527.999753)); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

Đầu ra là:

Max: 3 
Min: 0 
4527.9997539 
4,528 

Điều đó có nghĩa rằng nó không đưa vào tài khoản bất kỳ chữ số phân số. Nếu tôi bỏ ghi chú dòng:

nf.setMaximumFractionDigits(4); 

đầu ra là:

Max: 3 
Min: 0 
4527.9997539 
4,527.9998 

Nói cách khác nó hoạt động OK. Điều gì thực sự xảy ra với phương thức setMaximumFractionDigits() và nó không mang số chứa 3 số thập phân trong trường hợp đầu tiên?

+0

Bạn có ý định đặt các vị trí thập phân của một số theo cách thủ công không? –

Trả lời

11

Tôi đã tìm thấy câu trả lời cuối cùng. Phương thức setMaximumFractionDigits() chỉ có tác dụng trên phương thức format(). Nó không liên quan gì đến parse(). Trong đoạn mã của tôi, tôi sử dụng phương thức format() sau khi đặt thủ công số chữ số thập phân thành 4, do đó nó ảnh hưởng đến kết quả.

1

Số được tạo từ Chuỗi được phân tích cú pháp có nhiều chữ số phân số hơn. Nhưng khi bạn cố gắng xuất nó sử dụng định dạng MaximumFractionDigits để tạo Chuỗi từ bất kỳ Số nào đã cho.

+0

Tôi vẫn không thể hiểu nguyên nhân của sự cố. Ngay cả khi tôi đặt các chữ số tối đa bằng tay (thông qua phương thức setMaximumFractionDigits) thành 3, nó trả về một số không có phần phân số. Tôi nghĩ rằng nó nên đã đưa ra một phần nhỏ của 3 chữ số. – arjacsoh

2

Nếu bạn muốn thiết lập bằng tay số lượng chữ số thập phân sử dụng một trong các tùy chọn sau:

Thứ nhất:

//sets 'd' to 3 decimal places & then assigns it to 'formattedNum' 
    String formattedNum = String.format("%.3f", d); //variable 'd' taken from your code above 

HOẶC

//declares an object of 'DecimalFormat' 
    DecimalFormat aDF = new DecimalFormat("#.000"); 

    //formats value stored in 'd' to three decimal places 
    String fomrattedNumber = aDF.format(d); 

Theo tôi tùy chọn phù hợp với thứ hai tốt nhất cho trường hợp của bạn.