2009-02-12 47 views
13

Tôi đang cố gắng sử dụng String.Format ("{0: c}", somevalue) trong C# nhưng có một thời gian khó tìm ra cách định cấu hình đầu ra thành đáp ứng nhu cầu của tôi. Dưới đây là nhu cầu của tôi:Cần định dạng tiền tệ tùy chỉnh để sử dụng với String.Format

  1. 0 kết quả đầu ra để trống
  2. 1.00 kết quả đầu ra đến $ 1.00
  3. 10.00 đầu ra đến $ 10.00
  4. 100.00 đầu ra đến $ 100.00
  5. 1000.00 đầu ra đến $ 1,000.00

tôi đã thử String.Format ("{0: c}", somevalue) nhưng với giá trị bằng không, nó xuất ra $ 0,00 mà không phải là những gì tôi muốn. Tôi cũng đã thử String.Format ("{0: $ 0,0.00; $ (0,0.00); #}", somevalue), nhưng đối với 1.0 nó kết quả đầu ra $ 01,00. String.Format ("{0: $ 0,00; $ (0,00); #}", somevalue) hoạt động cho hầu hết các trường hợp, nhưng khi somevalue là 1000,00 đầu ra là $ 1000,00.

Có một số định dạng phù hợp với tất cả 5 trường hợp ở trên không? Tất cả tài liệu tôi chỉ đọc chi tiết những điều cơ bản và không chạm vào loại kịch bản này.

+0

nếu văn bản đầu ra (tiền> 0); – MrFox

Trả lời

19

Nếu bạn sử dụng

string.Format("{0:$#,##0.00;($#,##0.00);''}", value) 

Bạn sẽ nhận được "" cho giá trị zero và các giá trị khác nên được định dạng đúng quá.

+0

Đây là những gì tôi đang tìm kiếm. Tôi đang làm định dạng này trong một Repeater và muốn một cái gì đó đơn giản và súc tích. – Notorious2tall

+0

Phản ứng của Andrew đã làm việc quá và nếu tôi đã làm điều này trong codebehind tôi đã đi với giải pháp của mình và thậm chí không cố gắng tìm ra String.Format. Nhưng tôi đang tìm kiếm giải pháp thanh lịch. Không ai có thể đọc được suy nghĩ của tôi về điều đó. :) – Notorious2tall

+0

+1 từ tôi .. tuyệt vời .. bạn có thể vui lòng giải thích cho tôi một chút chi tiết về cách làm việc này .. –

4

Hãy thử một cái gì đó như thế này:

String currency = (number == 0) ? String.Empty : number.ToString("c"); 
4

Tùy thuộc vào việc bạn liên tục sử dụng cùng một kiểu dữ liệu cho tất cả các giá trị tiền tệ của mình, bạn có thể viết phương pháp mở rộng để làm cho trường hợp của bạn luôn được đáp ứng. Ví dụ, nếu bạn đang sử dụng loại thập phân:

public static string ToCurrencyString (this decimal value) 
{ 
    if (value == 0) 
    return String.Empty; 
    return value.ToString ("C"); 
} 
0

Các "C" định dạng tiền tệ là tuyệt vời cho đến khi bạn cần một trống cho 0. Dưới đây là hai cách, một đề cập ở trên, tương tự như những người mà tôi sử dụng cung cấp cho bạn chỗ trống cho 0:

// one way 
string.Format("{0:$#,##0.00;($#,##0.00);''}", somevalue) 

// another way 
somevalue.ToString("$#,##0.00;($#,##0.00);''") 

kỹ thuật thứ hai cảm thấy nhiều hơn "thông thạo", nếu bạn thích rằng kiểu mã (như tôi làm).

Các vấn đề liên quan