2011-01-30 8 views
33

Có thư viện nào để định dạng đúng loại tiền tệ đại diện cho một quốc gia không?Định dạng tiền tệ để hiển thị

Ví dụ Anh - £ 127,54 Hà Lan € 127,54- USA $ 127,54

vv ..

Một số điều cần xem xét,

  1. tệ Symbol

  2. Vị trí ký hiệu tiền tệ - Có thể hoặc là pla ce trước hoặc sau số .

  3. Negative-lượng hiển thị

Trả lời

59

Thử Currency Format Specifier ("C"). Nó tự động đưa văn bản giao diện người dùng hiện tại vào tài khoản và hiển thị các giá trị tiền tệ tương ứng.

Bạn có thể sử dụng nó với String.Format hoặc phương pháp quá tải ToString cho loại số.

Ví dụ:

double value = 12345.6789; 
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture)); 

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture)); 

Console.WriteLine(value.ToString("C3", CultureInfo.CreateSpecificCulture("da-DK"))); 

// The example displays the following output on a system whose 
// current culture is English (United States): 
//  $12,345.68 
//  $12,345.679 
//  kr 12.345,679 
+0

Một lưu ý nhỏ cho độc giả trong tương lai, số thập phân là loại ưa thích cho các giá trị tiền tệ. Vui lòng xem câu trả lời này của Zneak để biết thêm chi tiết: https://stackoverflow.com/a/3730040/2573109 –

21

Đây là loại chức năng được xây dựng trong

Khi sử dụng một số thập phân, bạn có thể sử dụng một format string "C" hoặc "c"..

decimal dec = 123.00M; 
string uk = dec.ToString("C", new CultureInfo("en-GB"); // uk holds "£123.00" 
string us = dec.ToString("C", new CultureInfo("en-US"); // us holds "$123.00" 
+2

Giả sử bạn thiếu dấu ngoặc đơn gần trên các dòng 2 và 3. –

2

này số- (bộ tệ GB (Anh/Anh/Anh/£) sau đó in một dòng Sau đó đặt tiền tệ Mỹ/$ và in một dòng)

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB",false);   
Console.WriteLine("bbbbbbb {0:c}",4321.2); 
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US",false); 
Console.WriteLine("bbbbbbb {0:c}",4321.2); 

sẽ hiện thị

bbbbbbb £4,321.20 
bbbbbbb $4,321.20 

Để biết danh sách tên văn hóa, ví dụ: en-GB en-US e.t.c.
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.80).aspx

4

Vấn đề với việc một số lượng nhất định và hiển thị nó với ToString ("C", văn hóa) là nó có hiệu quả thay đổi số tiền tiền tệ mặc định của nền văn hóa nhất định. Nếu bạn có một số tiền nhất định, mã tiền tệ ISO của số tiền đó và bạn muốn hiển thị nó cho một nền văn hóa nhất định, tôi khuyên bạn chỉ nên tạo một phương thức mở rộng thập phân như phương thức dưới đây. Điều này sẽ không tự động giả định rằng đơn vị tiền tệ bằng loại tiền tệ mặc định của nền văn hóa:

public static string ToFormattedCurrencyString(
    this decimal currencyAmount, 
    string isoCurrencyCode, 
CultureInfo userCulture) 
{ 
    var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol; 

    if (userCurrencyCode == isoCurrencyCode) 
    { 
     return currencyAmount.ToString("C", userCulture); 
    } 

    return string.Format(
     "{0} {1}", 
     isoCurrencyCode, 
     currencyAmount.ToString("N2", userCulture)); 
} 

Điều này sẽ sử dụng ký hiệu tiền tệ địa phương hoặc mã tiền tệ ISO với số tiền - tùy theo điều kiện nào phù hợp hơn.Thông tin thêm về chủ đề in this blog post.

-2
public static string ToFormattedCurrencyString(
    this decimal currencyAmount, 
    string isoCurrencyCode, 
    CultureInfo userCulture) 
{ 
    var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol; 

if (userCurrencyCode == isoCurrencyCode) 
{ 
    return currencyAmount.ToString("C", userCulture); 
} 

return string.Format(
    "{0} {1}", 
    isoCurrencyCode, 
    currencyAmount.ToString("N2", userCulture)); 

}

+2

Chính xác như câu trả lời của @ jakejgordon từ 2 năm trước đó. – kristianp