تتعامل String.Format("{0:C2}"، -1234) (تنسيق العملة) مع الأرقام السالبة على أنها موجبة
-
05-07-2019 - |
سؤال
انا استخدم 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)