String.Format (“{0: C2}”, -1234) (format monétaire) traite les nombres négatifs comme positifs.
-
05-07-2019 - |
Question
J'utilise String.Format ("{0: C2}", -1234)
pour formater les nombres.
Il formate toujours le montant en un nombre positif, alors que je souhaite qu'il devienne $ - 1234
.La solution 3
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 (voici ce que je vais utiliser):
FormatCurrency(-1234.56, 2, 0, 0)
Ou je me créerai une fonction de conversion de format personnalisée utilisant la fonction VB en transmettant mes paramètres personnalisés.
Pour plus d'informations, consultez la fonction FormatCurrency ( Visual Basic) dans le msdn.
Autres conseils
Ai-je raison de dire qu'il le met entre crochets, c'est-à-dire qu'il le formate en tant que (1 234,00 $)
? Si tel est le cas, j’estime 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 "généralement à droite", appelez Clone ()
pour créer une copie mutable, puis définissez le CurrencyNegativePattern
de manière appropriée (je pense que vous voulez la valeur 2). / p>
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);
}
}
Ceci imprime -1 234,00 $. Si vous voulez exactement $ -1234, vous devez définir CurrencyGroupSizes
propriété sur new int [] {0}
et utilisez à la place <{code>: {0: C0} & <; code> de
"{0: C2}"
en tant que chaîne de formatage.
EDIT: Voici une méthode d'assistance que vous pouvez utiliser et 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 formatage.
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)