2010-07-22 171 views
11

Tôi có một số có số chữ số thay đổi sau dấu thập phân. Tôi muốn định dạng số bằng dấu phẩy và tất cả các số thập phân.Làm cách nào để định dạng một số trong C# bằng dấu phẩy và số thập phân?

Ví dụ: 42,023,212.0092343234

Nếu tôi sử dụng ToString ("N") tôi nhận được chỉ có 2 số thập phân, ToString ("f") mang lại cho tôi tất cả các số thập phân có dấu phẩy. Làm thế nào để có được cả hai?

Trả lời

12

Không chắc chắn (và không thể kiểm tra ngay bây giờ) nhưng có gì đó giống như tác phẩm này không?

"#,##0.################" 
+0

Tốt nhất cho đến nay, nó hoạt động miễn là số thập phân không dài hơn số lượng của # ... Tôi đã hy vọng để tránh tùy chọn này, nhưng nếu cách duy nhất của nó ..... – NotDan

+0

Cuộc gọi tốt. Tôi nói đây là câu trả lời hay nhất. –

1

Hãy thử ToString("N2")

+0

Đó chỉ hiển thị cuối cùng 2 số thập phân, tôi muốn nó hiển thị tất cả chúng nhưng số thập phân sẽ thay đổi từ 0-? – NotDan

2

CẬP NHẬT: Nhìn vào MSDN documentation on the System.Double type, tôi thấy điều này:

Theo mặc định, giá trị đúp chứa 15 chữ số thập phân của độ chính xác, mặc dù tối đa 17 chữ số được duy trì nội bộ.

Vì vậy, tôi nghĩ pdr's on to something, thực sự. Chỉ cần làm điều này:

// As long as you've got at least 15 #s after the decimal point, 
// you should be good. 
value.ToString("#,#.###############"); 

Dưới đây là một ý tưởng:

static string Format(double value) 
{ 
    double wholePart = Math.Truncate(value); 
    double decimalPart = Math.Abs(value - wholePart); 
    return wholePart.ToString("N0") + decimalPart.ToString().TrimStart('0'); 
} 

Ví dụ:

Console.WriteLine(Format(42023212.0092343234)); 

Output:

42,023,212.00923432409763336

Ha, vâng, như bạn có thể thấy, điều này cho kết quả không hoàn hảo, do (tôi nghĩ) với các vấn đề toán học dấu chấm động. Oh tốt; đó là một lựa chọn, anyway.

+0

Điều đó có thể làm việc, nhưng tôi muốn nhận được một chuỗi định dạng mà tôi có thể cung cấp cho một Grid Control, hoặc bất cứ điều gì khác mà hiểu được.Net định dạng để nó có thể làm các định dạng cho tôi và tôi chỉ có thể cung cấp cho nó giá trị thực tế. – NotDan

4
string.Format("{0:#,##0.############}", value); 

sẽ cung cấp cho bạn lên đến 12 chữ số thập phân.

Không có bộ định dạng định dạng tùy chỉnh cho "tất cả các chữ số sau", vì vậy một cái gì đó như thế này sẽ gần nhất với những gì bạn muốn.

Lưu ý rằng bạn bị giới hạn bởi độ chính xác của biến số. Một double chỉ có 15-16 chữ số chính xác, do đó, bên tay trái của bạn sẽ lớn hơn số chữ số thập phân sẽ rơi ra.

-1

Dưới đây là cách hơi để đạt đến sự mong đợi của bạn ...

decimal d = 42023212.0092343234M; 

NumberFormatInfo nfi = (NumberFormatInfo) CultureInfo.InvariantCulture.NumberFormat.Clone(); 

nfi.NumberDecimalDigits= (d - Decimal.Truncate(d)).ToString().Length-2; 

Console.WriteLine(d.ToString("N",nfi)); 

Để cụ thể hơn về NumberFormatInfo .. nhìn vào MSDN ..

http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx

+0

Có lẽ vì bạn đang thực hiện một diễn viên lồng đôi. –

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