Comment utiliser NumberFormatInfo pour supprimer les parenthèses pour les valeurs négatives
Nous utilisons actuellement les suivants pour la création de valeurs en usd dans notre application web:
string.Format("{0:C0}", dollarValue );
Dans cet exemple, si dollarValue est de 145, puis nous allons voir: $145. Si c'est -145, puis nous allons voir de dollars (145) plutôt que$145. Notez que, pour nous, dollarValue est un double, mais il pourrait être n'importe quel nombre type. Je pense qu'.
De toute façon, ce que je veux, c'est pour qu'il soit $145 ou -$145.
Maintenant, d'après mes recherches, il pourrait être possible de le faire à l'aide de la classe NumberFormatInfo. Je ne peux pas comprendre comment l'utiliser, et je ne peux pas trouver un exemple valable. Je l'ai fait voir à cette question ici: C# création d'un custom NumberFormatInfo d'affichage "Libre" lorsque la valeur de la monnaie est de $0.00 mais l'exemple de MSDN liés à cette question semble un peu différent de ce que je veux vraiment faire.
Je me rends compte, j'ai besoin de faire quelque chose de l'suivantes:
double dollarValue = -145d;
string myMoney = dollarValue.ToString( "C0", someIFormatProvider );
où someIFormatProvider est susceptible de type NumberFormatInfo. Maintenant, ce que j'ai fait est-ce:
NumberFormatInfo ni = new NumberformatInfo();
ni.CurrencyNegativePattern = 1; //The value 1 should mean not to use parenthesis
string myMoney = dollarValue.ToString( "C0", ni );
...et je reçois une "Instance est en Lecture Seule" exception. Alors que la "documentation" pour les CurrencyNegativePattern bien dit que vous pouvez DÉFINIR et OBTENIR la valeur, apparemment, vous ne pouvez pas. Aussi, NumberFormatInfo est une classe scellée. Je ne peux pas facilement, créer une nouvelle classe basée enlever et remplacer la valeur.
Je suis à une perte quant à la façon de traiter avec cela. Maintenant, ma solution est de simplement nier ma valeur négative et avoir un résultat positif que je ne le string.Format(...)
de nouveau. Oui, je me rends compte il n'y a pas de signe négatif en face de cela, mais, bien sûr, qui est facilement résolu par l'ajout d'un "-" devant le résultat autant que nécessaire.
Ce que quelqu'un serait capable de me donner un exemple de la façon d'utiliser efficacement les NumbefFormatInfo classe correctement dans cette situation? Merci.
Le code fonctionne pour moi (après la fixation de l'affaire sur
NumberformatInfo
)OriginalL'auteur Dan7el | 2012-06-13
Vous devez vous connecter pour publier un commentaire.
Si votre Système d'Exploitation actuel de la culture est en-US alors vous n'avez pas besoin de la ligne suivante
Le code sera
et Si vous voulez le faire avec NumberFormatInfo
une autre façon
J'ai essayé cette réponse dans une application console pour le test et le résultat était de dollars (145). Si j'ai utilisé "C" au lieu de "0:C0", pour le format, je me suis ($145.00).
de vérifier la édités réponse s'il vous plaît.
Bon, le NumberFormatInfo réponse que vous avez fournie fonctionne si je mets le CurrencyNegativePattern à 1. Ceci est également définit correctement le symbole de la devise qui n'est pas correctement réglé, si je n'utilise pas la culture. Du bon travail.
je vous remercie pour votre réponse. Je pense qu'il y a une partie manquante dans votre code, c'est la partie où vous spécifiez "le nombre.CurrencyNegativePattern = 1" afin de supprimer les parenthèses. Voir cette réponse: stackoverflow.com/a/11015234/2816119
OriginalL'auteur MMK
Vous pouvez faire un clone de la
NumberFormat
propriété dans leCurrentCulture
(cela permettra d'assurer que vous gardez le bon symbole de la monnaie si vous globaliser votre demande). Après cela, il suffit de régler leCurrencyNegativePattern
de la propriété à la valeur de votre choix et passer dans votreNumberFormatInfo
dans ledouble.ToString()
fonction, comme suit:Cela vous permettra également d'utiliser la culture actuelle, de sorte que vous n'avez pas à coder en dur "en-US" dans le cas où vous finissez par la mondialisation de votre application web.
OriginalL'auteur Jon Senchyna
...
ou
$
et la-
.Et bien sûr,
string.Format("{0:$#.;-$#.}", dollarValue)
est équivalent àdollarValue.ToString("$#.;-$#.")
de la même manière questring.Format("{0:C0}", dollarValue)
est équivalent àdollarValue.ToString("C0")
.format fixe....merci pour l'attraper...et j'aime votre deuxième option un peu mieux...reflètent ce changement.
OriginalL'auteur Gene S
'instance est ReadOnly' signifie que vous avez une lecture seule instance de
NumberFormatInfo
. Vous pouvez obtenir une écriture instance par clonage d'un lire-une seule instance:OriginalL'auteur Joe
Êtes-vous sûr que le CurrencyNegativePattern peut pas attribuer? J'ai essayé avec ce code:
et c'est un succès.
OriginalL'auteur Roby
À assurez-vous de demeurer dans un "NOUS-contexte" j'aimerais faire quelque chose comme ceci:
La
Dump
vient de LinqPad, qui affiche-$145
.L'erreur que vous obtenez se sent comme il vient de vous l'obtention de votre
NumberFormatInfo
quelque chose comme ceci:Dans ce cas, je voudrais le remplacer par quelque chose comme ceci:
OriginalL'auteur madd0