2010-06-28 9 views
1

Dans mon application, un calcul est effectué pour afficher le texte dans l'interface graphique. L'application multiplie une quantité donnée par un utilisateur par un nombre défini (Dites 0,85) pour créer un total (types d'utilisateurs dans 2, l'application fonctionne 2 x 0,85).Comment formater correctement le texte en fonction de la devise

Comme le nombre affiché est celui d'une devise, j'essaie de formater correctement le texte pour le rendre lisible et correct.

Jusqu'à présent, j'ai essayé

.ToString("N2"); 

Cela a donné lieu à deux vient de zéro supplémentaire étant ajouté à la fin de la figure.

Le problème peut être vu ici:

Error!

Comme vous pouvez voir la valeur correcte est 0,68 (ou 0,68 £) et mon texte montre £ 68,00 par la « N2 » sur le ToString aide mais il me reste encore £ 68. Je sais que ce n'est pas aussi trivial que ça en a l'air, mais c'est quelque chose que je n'avais jamais eu besoin de penser avant et ça m'a fait penser à ça pendant un bon bout de temps.

Merci!

Remarque: Les données sont stockées en tant que doublet et était précédemment un flottant, l'application est flexible pour changer. L'icône de la devise n'est pas non plus nécessaire car je le fournis manuellement, seul le formatage est nécessaire.

Répondre

1

À première vue, il semble que vous avez votre valeur multiplié (0,68) par 100 pour obtenir 68,00 qui serait correct. Cependant, votre quantité semble être de 80, ce qui devrait vous donner une valeur de 54,40.

Si vous multipliez par 2 alors vous devriez obtenir 1,70.

+0

Merci pour l'aide, après avoir travaillé manuellement il semble que j'ai manqué deux décimales dans la variable définie. Après avoir modifié la valeur, le texte corrige correctement. –

2

Essayez ceci:

string.Format("{0:C}", money_value); 

Cela permettra également de travailler:

.ToString("C"); 

(Je sais que cela comprendra le symbole monétaire, mais l'OP ne pas dire que c'était un problème, il suffit que il n'a pas été nécessaire)

Si vous voulez aller, vous pouvez le faire.

string.Format(ui_culture, “{0:C}”, money_value); 

ui_culture est la culture associée à la devise.

Edité à ajouter:

La bonne chose au sujet de cette mise en forme est qu'il gère tous vos signes de ponctuation.

Je ne suis pas sûr que les symboles monétaires soient toujours le caractère principal. Si oui, vous pouvez le supprimer:

string.Format(ui_culture, “{0:C}”, money_value).substring(1); 
+0

Cela inclura le symbole de devise - http://msdn.microsoft.com/en-us/library/dwhawy9k(VS.71).aspx - mais à partir de la capture d'écran qui n'est pas nécessaire car il est déjà présent en tant qu'étiquette . – ChrisF

+0

J'ai voté pour la réponse car c'était très utile mais une autre réponse a réussi à la résoudre. Aussi, si mon application n'avait pas besoin de la liste déroulante et dépendait de la langue définie par les utilisateurs, alors votre solution serait certainement la solution choisie. –

0

Vous devez utiliser la surcharge ToString qui prend un paramter IFormatProvider:

double value = 80; 
string ukCurrency = value.ToString("N2", CultureInfo.CreateSpecificCulture("en-GB")); 

Je suis vraiment pas sûr que cela comprendra le caractère de monnaie (non testé Exemple). J'espère que l'utilisation de la chaîne de format "N2" dépouillera le caractère de devise ... mais il ne peut pas.Il pourrait être assez facile de sauter le premier caractère de la chaîne:

ukCurrency = ukCurrency.Substring(1);