Định dạng thập phân cho giá trị phần trăm?


206

Những gì tôi muốn là một cái gì đó như thế này:

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

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

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

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

Câu trả lời:


422

Sử dụng Pchuỗi định dạng . Điều này sẽ thay đổi theo văn hóa:

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

1
Nhìn vào đây sự khác biệt lớn giống như kiểu Mỹ và Pháp. Nếu ở trên thay đổi theo văn hóa, có Pđịnh dạng độc lập về văn hóa không?
bonCodigo

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

11

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

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

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

Ví dụ đầy đủ hơn:

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)

3

Nếu bạn muốn sử dụng một định dạng cho phép bạn giữ số như mục nhập của bạn, định dạng này hoạt động với tôi: "# \\%"


2

Mã này có thể giúp bạn:

double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";

-8

Tôi đã tìm thấy câu trả lời ở trên là giải pháp tốt nhất, nhưng tôi không thích khoảng trống hàng đầu trước dấu phần trăm. Tôi đã thấy các giải pháp hơi phức tạp, nhưng tôi chỉ sử dụng phần 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)

Và vẫn sai, nếu bạn muốn buộc đầu vào đó nhiều đến mức bạn có thể đặt số là dấu phẩy và thêm dấu phần trăm, vì việc thay thế rất tốn kém và trong trường hợp này không hữu ích lắm "String.Format (" Giá trị: {0: F2} . ", 0,8526 * 100)"
rekiem87
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.