2009-11-24 8 views
155

Những gì tôi muốn là một cái gì đó như thế này:Định dạng thập phân cho giá trị phần trăm?

String.Format("Value: {0:%%}.", 0.8526) 

đâu %% là nhà cung cấp định dạng hoặc bất cứ điều gì tôi đang tìm kiếm. Kết quả là: Value: %85.26..

tôi về cơ bản cần nó cho ràng buộc WPF, nhưng trước tiên chúng ta hãy giải quyết vấn đề định dạng chung:

<TextBlock Text="{Binding Percent, StringFormat=%%}" /> 

Trả lời

345

Sử dụng P format string. Điều này sẽ thay đổi tùy theo văn hóa:

String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture) 
+0

[Nhìn vào sự khác biệt lớn ở đây giống như kiểu Mỹ và Pháp.] (Http://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx) Nếu ở trên thay đổi theo văn hóa, có định dạng 'P' độc lập với văn hóa không? – bonCodigo

+0

@bonCodigo: nếu bạn muốn đầu ra cho một nền văn hóa cụ thể, hãy chỉ định văn hóa một cách rõ ràng. –

3

Nếu bạn có một lý do chính đáng để dành định dạng văn hóa phụ thuộc và được kiểm soát rõ ràng về việc liệu hay không có một khoảng cách giữa giá trị và "%", và liệu " % "đang dẫn đầu hoặc theo dõi, bạn có thể sử dụng các thuộc tính PercentPositivePatternPercentNegativePattern của NumberFormatInfo.

Ví dụ, để có được một giá trị thập phân với một dấu "%" và không có khoảng cách giữa giá trị và "%":

myValue.ToString("P2", new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 }); 

hoàn chỉnh hơn ví dụ:

using System.Globalization; 

... 

decimal myValue = -0.123m; 
NumberFormatInfo percentageFormat = new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 }; 
string formattedValue = myValue.ToString("P2", percentageFormat); // "-12.30%" (in en-us) 
-7

Tôi có tìm thấy câu trả lời ở trên để trở thành giải pháp tốt nhất, nhưng tôi không thích không gian hàng đầu trước dấu phần trăm. Tôi đã thấy một số giải pháp phức tạp, nhưng tôi chỉ sử dụng phần bổ sung Thay thế này cho câu trả lời ở trên thay vì sử dụng các giải pháp làm tròn khác.

String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture) 
+0

Và vẫn sai, nếu bạn muốn ép đầu vào quá nhiều, bạn có thể đặt số đó là float và thêm dấu phần trăm, vì thay thế là tốn kém và trong trường hợp này không hữu ích lắm "String.Format (" Value: {0: F2 }. ", 0.8526 * 100)" – rekiem87

+0

hoàn toàn đồng ý với rekiem87 – Defkon1