2009-04-15 27 views
31

Tôi đang cố gắng không sử dụng dấu ',' char làm dấu phân tách nghìn khi hiển thị chuỗi, nhưng để sử dụng dấu cách thay thế. Tôi đoán tôi cần phải xác định một nền văn hóa tùy chỉnh, nhưng tôi dường như không làm đúng. Bất kỳ con trỏ?Sử dụng dấu tách nghìn tùy chỉnh trong C#

ví dụ: hiển thị 1000000 như 1 000 000 thay vì 1.000.000

(không, String.Replace() không phải là giải pháp tôi muốn sử dụng: P)

+0

Có gì sai khi sử dụng String.Replace()? –

+1

@Jon B - bởi vì Thay thế sẽ không độc lập với văn hóa. Điều gì sẽ xảy ra nếu bạn chạy trên một máy tính có hàng nghìn giây. ? –

+0

và kể từ khi tôi đã định dạng số, nó sẽ được lộn xộn mã – Luk

Trả lời

63

Tôi đề nghị bạn tìm thấy một NumberFormatInfo mà phù hợp chặt chẽ nhất những gì bạn muốn (nghĩa là nó nằm ngoài bộ tách hàng nghìn), hãy gọi Clone() trên đó và sau đó đặt thuộc tính NumberGroupSeparator. (Nếu bạn định định dạng các số sử dụng định dạng tiền tệ, bạn cần phải thay đổi CurrencyGroupSeparator thay thế /.) Sử dụng thông tin định dạng cho các cuộc gọi của bạn tới string.Format v.v. và bạn sẽ ổn. Ví dụ:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     NumberFormatInfo nfi = (NumberFormatInfo) 
      CultureInfo.InvariantCulture.NumberFormat.Clone(); 
     nfi.NumberGroupSeparator = " "; 

     Console.WriteLine(12345.ToString("n", nfi)); // 12 345.00 
    } 
} 
+0

@Jon: Bạn đang rất nhanh ... nhưng thường là quan điểm và chính xác. – Lucero

+0

Thương hiệu Skeet LoadBalancer có vấn đề định tuyến? –

+0

Wow, Cảm ơn bạn Jon! – Luk

1

Cách dễ nhất ...

num.ToString("### ### ### ### ##0.00") 
+5

Mặc dù điều này làm việc nó thực sự sẽ sản xuất không gian ở phía trước của số. Ví dụ, số 1 sẽ có 4 dấu cách phía trước nó. Vì vậy, ít nhất bạn sẽ phải cắt nó. Tôi nghĩ giải pháp tốt nhất là điều chỉnh NumberFormatInfo nếu bạn muốn ghi đè định dạng mặc định Văn hóa. – Johncl

4

Có một phiên bản hơi đơn giản của Jon Skeet một:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     NumberFormatInfo nfi = new NumberFormatInfo {NumberGroupSeparator = " ", NumberDecimalDigits = 0}; 

     Console.WriteLine(12345678.ToString("n", nfi)); // 12 345 678 
    } 
} 

Và 'NFI' khởi có thể được bỏ qua và đưa trực tiếp như tham số vào ToString() phương pháp.

+0

Về cơ bản, câu trả lời của John Skeet được viết lại. Không chính xác sáng tạo hoặc ngắn hơn! –

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