Lors de l'affichage de la valeur d'une décimale actuellement avec .ToString()
, il est précis d'aimer 15 décimales, et puisque je l'utilise pour représenter des dollars et des cents, je veux seulement que la sortie soit à 2 décimales.
Dois-je utiliser une variante de .ToString()
pour cela?
Decimal
etDouble
typeToString
accepte l'argument pour le formatage. Essayez de convertir d'abord votre valeur en décimal / double.Je sais que c'est une vieille question, mais j'ai été surpris de voir que personne ne semblait poster une réponse à cela;
Voici ce que j'utiliserais:
http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx
la source
Cette volonté:
23.456
→23.46
23
→23.00
;12.5
→12.50
Idéal pour afficher des devises.
Consultez la documentation sur ToString ("F") (merci à Jon Schneider).
la source
.
peut être remplacé par,
basé sur la culture. Vous devez passerCultureInfo.InvariantCulture
comme deuxième argument pour le désactiver.Si vous en avez juste besoin pour l'affichage, utilisez string.
http://www.csharp-examples.net/string-format-double/
Le "m" est un suffixe décimal. À propos du suffixe décimal:
http://msdn.microsoft.com/en-us/library/364x0z75.aspx
la source
Étant donné d décimal = 12,345; les expressions d.ToString ("C") ou String.Format ("{0: C}", d) rapportent 12,35 $ - notez que les paramètres de devise de la culture actuelle, y compris le symbole, sont utilisés.
Notez que "C" utilise le nombre de chiffres de la culture actuelle. Vous pouvez toujours remplacer la valeur par défaut pour forcer la précision nécessaire avec
C{Precision specifier}
likeString.Format("{0:C2}", 5.123d)
.la source
Si vous voulez le mettre en forme avec des virgules ainsi qu'un point décimal (mais pas de symbole monétaire), comme 3,456,789.12 ...
la source
Il y a déjà deux réponses à haut score qui se réfèrent à Decimal.Round (...) mais je pense qu'un peu plus d'explications sont nécessaires - car il y a une propriété importante inattendue de Decimal qui n'est pas évidente.
Une décimale «sait» combien de décimales elle a en fonction de son origine.
Par exemple, les éléments suivants peuvent être inattendus:
Faire les mêmes opérations avec
Double
ne donnera aucune décimale ("25"
) pour chacun des éléments ci-dessus.Lorsque vous voulez une décimale à 2 décimales, il y a environ 95% de chance, c'est parce que c'est de la monnaie, auquel cas cela est probablement correct pour 95% du temps:
Ou en XAML, vous utilisez simplement
{Binding Price, StringFormat=c}
J'ai rencontré un cas où j'avais besoin d'une décimale AS comme décimale lors de l'envoi de XML au service Web d'Amazon. Le service se plaignait car une valeur décimale (originaire de SQL Server) était envoyée
25.1200
et rejetée (25.12
était le format attendu).Tout ce que je devais faire était
Decimal.Round(...)
avec 2 décimales pour résoudre le problème.TypedValue
est de typeDecimal
donc je ne pouvais pas simplement faireToString("N2")
et je devais l'arrondir et le garder commedecimal
.la source
Voici un petit programme Linqpad pour montrer différents formats:
Voici les résultats:
la source
Méthode Math.Round (Decimal, Int32)
la source
Très rarement, voudriez-vous une chaîne vide si la valeur est 0.
La réponse la mieux notée est incorrecte et a perdu 10 minutes (la plupart) du temps des gens.
la source
"#"
signifie essentiellement le chiffre du nombre (si nécessaire) (sans rembourrage s'il n'est pas nécessaire)"0"
signifie le chiffre du numéro (sans importance quoi) (rembourré avec des zéros si non disponible)La réponse de Mike M. était parfaite pour moi sur .NET, mais .NET Core n'a pas de
decimal.Round
méthode au moment de la rédaction.Dans .NET Core, j'ai dû utiliser:
Une méthode hacky, y compris la conversion en chaîne, est la suivante:
la source
Aucun de ceux-ci n'a fait exactement ce dont j'avais besoin, pour forcer 2 dp et arrondir comme
0.005 -> 0.01
Forcer 2 dp nécessite d'augmenter la précision de 2 dp pour être sûr d'avoir au moins 2 dp
puis arrondi pour s'assurer que nous n'avons pas plus de 2 dp
la source
La réponse la mieux notée décrit une méthode de mise en forme de la représentation sous forme de chaîne de la valeur décimale, et cela fonctionne.
Cependant, si vous voulez réellement changer la précision enregistrée à la valeur réelle, vous devez écrire quelque chose comme ceci:
Un exemple de test unitaire:
la source
Vous pouvez utiliser system.globalization pour formater un nombre dans n'importe quel format requis.
Par exemple:
Si vous en avez un
decimal d = 1.2300000
et que vous devez le couper à 2 décimales, il peut être imprimé comme cecid.Tostring("F2",ci);
où F2 est un formatage de chaîne à 2 décimales et ci est la locale ou cultureinfo.pour plus d'informations, consultez ce lien
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
la source
https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx
Ce lien explique en détail comment vous pouvez gérer votre problème et ce que vous pouvez faire si vous souhaitez en savoir plus. Pour des raisons de simplicité, ce que vous voulez faire est
si vous le souhaitez pour une devise, vous pouvez le rendre plus facile en tapant "C2" au lieu de "F2"
la source
la source
Si vous devez conserver seulement 2 décimales (c'est-à-dire couper tous les autres chiffres décimaux):
Si vous ne devez conserver que 3 décimales:
la source