Memformat desimal untuk nilai persentase?


206

Yang saya inginkan adalah sesuatu seperti ini:

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

Di mana %% adalah penyedia format itu atau apa pun yang saya cari. Harus menghasilkan: Value: %85.26..

Saya pada dasarnya membutuhkannya untuk pengikatan WPF, tapi pertama mari kita selesaikan masalah pemformatan umum:

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

Jawaban:



11

Jika Anda memiliki alasan yang baik untuk mengesampingkan pemformatan yang bergantung pada budaya dan mendapatkan kontrol eksplisit atas apakah ada ruang antara nilai dan "%", dan apakah "%" memimpin atau mengekor, Anda bisa menggunakan NumberFormatInfo PersenPositifPertern dan Properti PerscentNegativePattern .

Misalnya, untuk mendapatkan nilai desimal dengan tanda "%" dan tidak ada spasi antara nilai dan "%":

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

Contoh lebih lengkap:

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

Jika Anda ingin menggunakan format yang memungkinkan Anda menyimpan nomor seperti entri Anda, format ini berfungsi untuk saya: "# \\%"


2

Kode ini dapat membantu Anda:

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

-8

Saya telah menemukan jawaban di atas untuk menjadi solusi terbaik, tetapi saya tidak suka ruang terdepan sebelum tanda persen. Saya telah melihat solusi yang agak rumit, tetapi saya hanya menggunakan tambahan Ganti ini untuk jawaban di atas daripada menggunakan solusi pembulatan lainnya.

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

Dan masih salah, jika Anda ingin memaksakan input sebanyak itu, Anda dapat memasukkan nomor sebagai float dan menambahkan tanda persen, karena penggantian itu mahal dan dalam hal ini tidak terlalu berguna "String.Format (" Nilai: {0: F2} . ", 0.8526 * 100)"
rekiem87
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.