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=%%}" />
Shimmy Weitzhandler
sumber

Jawaban:

422

Gunakan Pformat string . Ini akan bervariasi berdasarkan budaya:

String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture)
Michael Haren
sumber
1
Melihat perbedaan besar di sini adalah seperti tipe AS dan Prancis. Jika di atas bervariasi menurut budaya, apakah ada Pformat yang bebas budaya ?
bonCodigo
2
@bonCodigo: jika Anda ingin output untuk budaya tertentu, tentukan budaya secara eksplisit.
Michael Haren
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)
Jon Schneider
sumber
3

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

David Neira
sumber
2

Kode ini dapat membantu Anda:

double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";
Nitika Chopra
sumber
-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)
Ian Townsend
sumber
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