تنسيق عشري لقيم النسبة المئوية؟
-
22-09-2019 - |
سؤال
ما أريده هو شيء من هذا القبيل:
String.Format("Value: {0:%%}.", 0.8526)
حيث ٪٪ هو مزود التنسيق أو أي شيء أبحث عنه. يجب أن ينتج: Value: %85.26.
.
أنا في الأساس بحاجة إليه لربط WPF ، ولكن أولاً دعنا نحل مشكلة التنسيق العام:
<TextBlock Text="{Binding Percent, StringFormat=%%}" />
المحلول
استخدم ال P
سلسلة تنسيق. هذا سوف يختلف باختلاف الثقافة:
String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture)
نصائح أخرى
إذا كان لديك سبب وجيه لتخصيص التنسيق المعتمد على الثقافة والحصول على سيطرة صريحة على ما إذا كانت هناك مساحة بين القيمة و "٪" ، وما إذا كانت "٪" رائدة أو متخيل ، يمكنك استخدام NumberFormatinfo's النسبة المئوية POSITIVETPATTERN و المئوية النسبية ملكيات.
على سبيل المثال ، للحصول على قيمة عشرية مع "٪" زائدة ولا توجد مساحة بين القيمة و "٪":
myValue.ToString("P2", new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 });
مثال أكثر اكتمالا:
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)
إذا كنت ترغب في استخدام تنسيق يتيح لك الاحتفاظ بالرقم مثل هذا ، فإن هذا التنسيق يعمل بالنسبة لي:"# \\%"
قد يساعدك هذا الرمز:
double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";
لقد وجدت أن الإجابة أعلاه هي الحل الأفضل ، لكنني لا أحب المساحة الرائدة قبل علامة النسبة المئوية. لقد رأيت حلولًا معقدة إلى حد ما ، لكنني فقط أستخدم هذه الإضافة إلى الإجابة أعلاه بدلاً من استخدام حلول التقريب الأخرى.
String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture)