2010-02-23 24 views
8

Tôi gặp sự cố với ghi đè decimal.ToString("C"). Về cơ bản những gì tôi muốn làm là như sau:Ký hiệu tiền tệ tùy chỉnh và số thập phân bằng cách sử dụng số thập phân .ToString ("C") và CultureInfo

CultureInfo usCulture = new CultureInfo("en-US"); 
Thread.CurrentThread.CurrentCulture = usCulture; 

NumberFormatInfo LocalFormat = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone(); 
LocalFormat.CurrencySymbol = "RM"; 

tôi muốn làm trên mã một (ToString override ("C")) chức năng đó khi đoạn mã sau được thực hiện:

decimal paid = Convert.ToDecimal(dr["TotalPaids"]); 
lblPaids.Text = paid.ToString("C"); 

Kết quả sẽ được RM4,900.00 thay vì $ 4,900.00

làm thế nào để tạo một ghi đè cho decimal.ToString("C") rằng sẽ giải quyết vấn đề của tôi

Cảm ơn trước.

+2

Bất kỳ cơ hội bạn có thể chỉnh sửa tiêu đề là mô tả hơn? "decimal.ToString (" C ")" không chỉ ra những gì bạn đang yêu cầu vì vậy khi nó xuất hiện trong Google thì không rõ câu hỏi là gì. –

+1

@SteveHiner, làm thế nào về tiêu đề bây giờ? – Korayem

+1

@Khoayem: Tốt hơn nhiều. :-) –

Trả lời

16

Để có được một định dạng như RM 11,123,456.00 bạn cũng cần phải thiết lập các thuộc tính sau

CurrentCulture modified = new CultureInfo(Thread.CurrentThread.CurrentCulture.Name); 
Thread.CurrentThread.CurrentCulture = modified; 
var numberFormat = modified.NumberFormat; 
numberFormat.CurrencySymbol = "RM"; 
numberFormat.CurrencyDecimalDigits = 2; 
numberFormat.CurrencyDecimalSeparator = "."; 
numberFormat.CurrencyGroupSeparator = ","; 

Nếu bạn làm điều đó lúc khởi động ứng dụng sau đó nên tạo định dạng ms-MY như en-US nhưng có ký hiệu tiền tệ RM mỗi khi bạn gọi phương thức ToString("C").

+0

Cảm ơn Mike. My CultureInfo là ms-MY. Nhưng với mục đích hiển thị giá trị tiền tệ, tôi cần sử dụng en-US vì nó hiển thị chính xác. Ví dụ: ms-MY = R11.747.435 và en-US = RM11,747,435.00. Có cách nào khác không, cách thức phương thức ToString ("C") ghi đè. Bạn có thể giúp tôi với điều đó không. –

+0

@Agamand True - Bạn luôn có thể gọi 'ToString (" C ", LocalFormat)' Hoặc thay đổi một số thuộc tính khác trên nền văn hóa hiện tại NumberFormatInfo. Có vẻ như bạn chỉ muốn thay đổi dấu tách và số chữ số thập phân. Tôi sẽ chỉnh sửa câu trả lời để bao gồm điều đó. –

+0

Cảm ơn Mike, Điều này thật hoàn hảo. Nhưng khi tôi đặt nó trong Global.asax, phương thức Application_Start.Tôi nhận được lỗi này 'System.Globalization.CultureInfo' không chứa định nghĩa cho 'NumberFormatInfo' và không có phương pháp mở rộng 'NumberFormatInfo' chấp nhận đối số đầu tiên của loại 'System.Globalization.CultureInfo' có thể được tìm thấy (bạn đang thiếu một sử dụng chỉ thị hoặc tham chiếu lắp ráp?) Tôi đã nhập System.Globalization. Làm thế nào tôi có thể giải quyết điều này .... –

2

sử dụng chuỗi định dạng này:

#,##0.00 $;#,##0.00'- $';0 $ 
decimal paid = Convert.ToDecimal(dr["TotalPaids"]); 
lblPaids.Text = paid.ToString("#,##0.00 $;#,##0.00'- $';0 $"); 
+2

Boiiiiiing (đầu rơi xuống) – demoncodemonkey

6

Nếu tôi hiểu câu hỏi của bạn một cách chính xác những gì bạn muốn là thay thế $ với RM. Nếu vậy, bạn cần phải vượt qua định dạng tùy chỉnh ...

lblPaids.Text = paid.ToString("C", LocalFormat); 
+0

Câu trả lời, nhưng CultureInfo cục bộ là (ms-MY). Vì tôi đang sử dụng Windows XP, ký hiệu tiền tệ cho văn hóa này là R và không phải RM là dấu hiệu chính xác. –

+0

Sau đó, bạn cần phải thay đổi giá trị bạn đang thiết lập: LocalFormat.CurrencySymbol = "R"; – Jonathan

-1
lblPaids.Text = paid.ToString("C",usCulture.Name); 

Hoặc

lblPaids.Text = paid.ToString("C",LocalFormat.Name); 

phải làm việc

2

Bạn có thể sử dụng phương pháp Double.ToString (String, IFormatProvider) https://msdn.microsoft.com/en-us/library/d8ztz0sa(v=vs.110).aspx

double amount = 1234.95; 

amount.ToString("C") // whatever the executing computer thinks is the right fomat 

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ie")) // €1,234.95 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("es-es")) // 1.234,95 € 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-GB")) // £1,234.95 

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-au")) // $1,234.95 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-us")) // $1,234.95 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ca")) // $1,234.95 
Các vấn đề liên quan