تتعامل String.Format("{0:C2}"، -1234) (تنسيق العملة) مع الأرقام السالبة على أنها موجبة

StackOverflow https://stackoverflow.com/questions/1001114

سؤال

انا استخدم String.Format("{0:C2}", -1234) لتنسيق الأرقام.

يقوم دائمًا بتنسيق المبلغ إلى رقم موجب، بينما أريده أن يصبح $ - 1234

هل كانت مفيدة؟

المحلول 3

أعتقد أنني سأستخدم ببساطة:

FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)

(في وحدة Microsoft.VisualBasic.Strings)

أو بكلمات أقصر (هذا ما سأستخدمه بالفعل):

FormatCurrency(-1234.56, 2, 0, 0)

أو سأصنع لنفسي وظيفة عملة تنسيق مخصصة تستخدم وظيفة VB لتمرير المعلمات المخصصة الخاصة بي.

لمزيد من التفاصيل قم بإلقاء نظرة على وظيفة تنسيق العملة (Visual Basic) في ام اس دي ان.

نصائح أخرى

هل أنا على حق في القول أنه وضعه بين قوسين، أي.انها تنسيقه كما ($1,234.00) ؟إذا كان الأمر كذلك، أعتقد أن هذا هو السلوك المقصود للولايات المتحدة.

ومع ذلك، يمكنك إنشاء بنفسك NumberFormatInfo والتي لا تتصرف بهذه الطريقة.خذ الموجود NumberFormatInfo وهو "صحيح في الغالب"، اتصل Clone() لعمل نسخة قابلة للتغيير، ثم قم بتعيين CurrencyNegativePattern بشكل مناسب (أعتقد أنك تريد القيمة 2).

على سبيل المثال:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        var usCulture = CultureInfo.CreateSpecificCulture("en-US");
        var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone();
        clonedNumbers.CurrencyNegativePattern = 2;
        string formatted = string.Format(clonedNumbers, "{0:C2}", -1234);
        Console.WriteLine(formatted);
    }
}

هذا يطبع -1,234.00 دولارًا.إذا كنت تريد بالفعل -1234 دولارًا أمريكيًا بالضبط، فستحتاج إلى تعيين CurrencyGroupSizes الملكية ل new int[]{0} والاستخدام "{0:C0}" بدلاً من "{0:C2}" كسلسلة التنسيق.

يحرر:إليك طريقة مساعدة يمكنك استخدامها والتي تقوم بنفس الشيء بشكل أساسي:

private static readonly NumberFormatInfo CurrencyFormat = CreateCurrencyFormat();

private static NumberFormatInfo CreateCurrencyFormat()
{
    var usCulture = CultureInfo.CreateSpecificCulture("en-US");
    var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone();
    clonedNumbers.CurrencyNegativePattern = 2;
    return clonedNumbers;
}

public static string FormatCurrency(decimal value)
{
    return value.ToString("C2", CurrencyFormat);
}

هناك خيار بسيط آخر وهو تحديد سلسلة التنسيق يدويًا.

String.Format("{0:$#,##0.00}", -1234)

أو، إذا كان رمز العملة يحتاج إلى أن يكون معلمة، فيمكنك القيام بذلك

String.Format("{0:" + symbol + "#,##0.00}", -1234)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top