J'utilise String.Format("{0:C2}", -1234)
pour formater les nombres.
Il formate toujours le montant en un nombre positif, alors que je veux qu'il devienne $ - 1234
Je pense que je vais simplement utiliser:
FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)
(dans le module Microsoft.VisualBasic.Strings)
Ou en termes plus courts (c'est ce que je vais réellement utiliser):
FormatCurrency(-1234.56, 2, 0, 0)
Ou je vais me faire une fonction formatcurrency personnalisée qui utilise la fonction VB en passant mes paramètres personnalisés.
Pour plus de détails, consultez la Fonction FormatCurrency (Visual Basic) dans le msdn.
Ai-je raison de dire qu'il le met entre crochets, c'est-à-dire qu'il le met en forme comme ($1,234.00)
? Si c'est le cas, je crois que c'est le comportement prévu pour les États-Unis.
Cependant, vous pouvez créer votre propre NumberFormatInfo
qui ne se comporte pas de cette façon. Prenez un NumberFormatInfo
existant qui est "pour la plupart correct", appelez Clone()
pour faire une copie modifiable, puis définissez CurrencyNegativePattern
de manière appropriée (I pensez que vous voulez la valeur 2).
Par exemple:
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);
}
}
Cela imprime -1 234,00 $. Si vous voulez réellement exactement $ -1234, vous devrez définir la propriété CurrencyGroupSizes
sur new int[]{0}
Et utiliser "{0:C0}"
Au lieu de "{0:C2}"
Comme chaîne de format.
EDIT: Voici une méthode d'aide que vous pouvez utiliser qui fait essentiellement la même chose:
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);
}
Une autre option simple consiste à spécifier manuellement la chaîne de format.
String.Format("{0:$#,##0.00}", -1234)
Ou, si le symbole monétaire doit être un paramètre, vous pouvez le faire
String.Format("{0:" + symbol + "#,##0.00}", -1234)