30/09/2018, 23:00

Thắc mắc về clone và định dạng số trong java

Mình có hai thắc mắc:

  1. Làm thế nào để định dạng tiền tệ ví du: 1,000,000.00 VND trong java.

  2. Liên quan đến clone trong dòng code sau:

     public class KhoiAB {
     public boolean equals(LopA other) {
        LopA temp = (LopA)this.clone();//được
        //LopA temp = (LopA)this//Không được;
        return (other.getName().trim().equals(temp.getName().trim()));
     } // clone ở đây có tác dụng gì?
Đỗ Trung Quân viết 01:11 ngày 01/10/2018

Làm thế nào để định dạng tiền tệ ví du: 1,000,000.00 VND trong java.

Bạn có thể sử dụng number format hoặc Currencies

Code tham khảo
static public void displayNumber(Locale currentLocale) {

    Integer quantity = new Integer(123456);
    Double amount = new Double(345987.246);
    NumberFormat numberFormatter;
    String quantityOut;
    String amountOut;

    numberFormatter = NumberFormat.getNumberInstance(currentLocale);
    quantityOut = numberFormatter.format(quantity);
    amountOut = numberFormatter.format(amount);
    System.out.println(quantityOut + "   " + currentLocale.toString());
    System.out.println(amountOut + "   " + currentLocale.toString());
}
Out put
123,456   vi_VN
345,987.246   vi_VN

Hoặc

static public void displayCurrency( Locale currentLocale) {

    Double currencyAmount = new Double(9876543.21);
    Currency currentCurrency = Currency.getInstance(currentLocale);
    NumberFormat currencyFormatter = 
        NumberFormat.getCurrencyInstance(currentLocale);

    System.out.println(
        currentLocale.getDisplayName() + ", " +
        currentCurrency.getDisplayName() + ": " +
        currencyFormatter.format(currencyAmount));
}
Out put

French (France), Euro: 9 876 543,21 €
VietNam(Vietnamese), Dong: 9.876.543,21 VND/DONG
English (United States), US Dollar: $9,876,543.21

Source

Liên quan đến clone trong dòng code sau:

Clone() : là một cách để tạo một bản sao của một đối tượng.
Tại sao phải dùng clone(); trong nhiều trường hợp để tiết kiệm tài nguyên, thay vì sử dụng new để tạo đối tượng mới.

LopA temp = (LopA)this.clone();//được

Dòng lệnh này. Bạn ép kiểu đối tượng this trong (KhoiAB) sang (LopA) rồi lại clone chính nó. Mình nghĩ chương trình sẽ không chạy và có lỗi compile-time error

LopA temp = (LopA)this//Không được;

Không ép kiểu được thôi

Với đoạn code trên thì mình sẽ không hoàn toàn hiểu được, bạn cần up toàn bộ classs A và KhoiAB có liên quan

Quân viết 01:13 ngày 01/10/2018

// clone ở đây có tác dụng gì?

chủ yếu là để mua việc thêm cho jvm vì cũng không có ý nghĩa nhiều lắm. Thay vì thế có thể dùng thẳng this thay cho clone ra temp luôn cũng được

Đỗ Trung Quân viết 01:09 ngày 01/10/2018

Vậy bạn nghĩ đoạn clone kia có chạy không?

Quân viết 01:04 ngày 01/10/2018

có thể chạy ngon hoặc có thể sinh exception, nhưng về mặt ý nghĩa thì trong trường hợp này là không có ý nghĩa

Đỗ Trung Quân viết 01:09 ngày 01/10/2018

nhưng về mặt ý nghĩa thì trong trường hợp này là không có ý nghĩa

Có ý nghĩa đấy, quan trọng phải biết cái Clone() bạn ý đã modify chưa và đối tượng this là gì
nếu this trỏ tới đối tượng LopB() mà LopB() extends LopA() thì sao?

LopB b = new LopB("Đỗ Trung Quân");  // nó vẫn chạy bình thường
Bài liên quan
0