2009-05-12 6 views
14

Cách thích hợp để định dạng đơn vị tiền tệ là gì nếu bạn định dạng đơn vị tiền tệ không phải là tiền gốc của văn hóa hiện tại? Ví dụ: nếu tôi định dạng đô la Mỹ cho nền văn hóa fr-FR thì tôi có định dạng văn bản như Hoa Kỳ hay không ($ 1,000.00) hoặc làm văn hóa fr-FR nhưng thay đổi ký hiệu Euro thành Đô la Mỹ biểu tượng (1 000,00 $). Có lẽ cái gì khác ($ 1 000,00 hoặc 1 000,00 USD)?Định dạng tiền tệ thích hợp khi không hiển thị đơn vị tiền tệ gốc của văn hóa

+0

nên không này thuộc về một số trang web SE khác ... có lẽ Kinh tế SE? http://economics.stackexchange.com/ Câu hỏi này liên quan đến phạm vi của StackOverflow như thế nào? – rayryeng

Trả lời

27

Không có quy tắc tuyệt đối ở đây nhưng một vài nguyên tắc hướng dẫn:

  1. Hãy thử và sử dụng định dạng số cho miền địa phương đó (ví dụ 1,000.00 ở Mỹ sẽ được hiển thị như 1'000,00 tại Đức);
  2. Hãy nhớ rằng các đơn vị tiền tệ khác nhau có thể sử dụng cùng một biểu tượng (ví dụ: $ được sử dụng bởi Đô la Úc và Đô la Mỹ) và có many currency symbols;
  3. Nếu trang web của bạn là đơn vị tiền tệ "đơn" thì chỉ cần sử dụng ký hiệu chính xác cho loại tiền tệ đó. Bởi điều này tôi có nghĩa là các trang web như Amazon, các trang web du lịch, các trang web mua sắm và như vậy. Các trang web này là đơn vị tiền tệ theo nghĩa là chúng là một đơn vị tiền tệ tại một thời điểm. Họ sẽ không hiển thị Ringits Malaysia và đô la Singapore cùng một lúc, ví dụ; và
  4. Nếu trang web của bạn có nhiều loại tiền tệ thì không sử dụng biểu tượng nào cả: sử dụng mã tiền tệ ba chữ cái chuẩn quốc tế như được xác định bởi ISO 4217 currency names and code elements. Các trang web như xe.com phù hợp với danh mục.
+0

Đã xóa câu trả lời gốc của tôi vì điều này là tốt hơn +1 – da5id

+0

Lời khuyên rất rõ ràng - Đối với các điểm # 1 và # 2, hãy kiểm tra tại đây để biết cách thực hiện điều này trong C# http://stackoverflow.com/questions/1071273/currency-formatting/1071302 – Ryan

0

Nếu bạn luôn muốn để hiển thị các biểu tượng, đây là một lớp tiện ích:

public class Utils { 

    public static SortedMap<Currency, Locale> currencyLocaleMap; 

    static { 
     currencyLocaleMap = new TreeMap<Currency, Locale>(new Comparator<Currency>() { 
      @Override 
      public int compare(Currency c1, Currency c2) { 
       return c1.getCurrencyCode().compareTo(c2.getCurrencyCode()); 
      } 
     }); 

     for (Locale locale : Locale.getAvailableLocales()) { 
      try { 
       Currency currency = Currency.getInstance(locale); 
       currencyLocaleMap.put(currency, locale); 
      } 
      catch (Exception e) { 
      } 
     } 
    } 


    public static String getAmountAsFormattedString(Double amount, Double decimals, String currencyCode) { 
     Currency currency = Currency.getInstance(currencyCode); 
     double doubleBalance = 0.00; 
     if (amount != null) { 
      doubleBalance = ((Double) amount)/(Math.pow(10.0, decimals)); 
     } 
     NumberFormat numberFormat = NumberFormat.getCurrencyInstance(currencyLocaleMap.get(currency)); 
     return numberFormat.format(doubleBalance); 
    } 

    public static String getCurrencySymbol(String currencyCode) { 
     Currency currency = Currency.getInstance(currencyCode); 
     return currency.getSymbol(currencyLocaleMap.get(currency)); 
    } 


}