Existe-t-il un formateur d'affichage qui produira des décimales comme ces représentations de chaîne en c # sans faire aucun arrondi?
// decimal -> string
20 -> 20
20.00 -> 20
20.5 -> 20.5
20.5000 -> 20.5
20.125 -> 20.125
20.12500 -> 20.125
0.000 -> 0
{0. #} arrondira et l'utilisation d'une fonction de type Trim ne fonctionnera pas avec une colonne numérique liée dans une grille.
c#
formatting
decimal
JC.
la source
la source
"0.0#"
.Je viens d'apprendre à utiliser correctement le
G
spécificateur de format. Consultez la documentation MSDN . Il y a une note un peu plus bas qui indique que les zéros de fin seront conservés pour les types décimaux lorsqu'aucune précision n'est spécifiée. Pourquoi ils feraient cela, je ne sais pas, mais spécifier le nombre maximum de chiffres pour notre précision devrait résoudre ce problème. Donc, pour le formatage des décimales,G29
c'est le meilleur pari.la source
Ce format de chaîne devrait rendre votre journée: "0. ###########################". Gardez à l'esprit que les décimales peuvent avoir au plus 29 chiffres significatifs.
Exemples:
la source
C'est encore une autre variation de ce que j'ai vu ci-dessus. Dans mon cas, je dois conserver tous les chiffres significatifs à droite de la virgule décimale, ce qui signifie supprimer tous les zéros après le chiffre le plus significatif. Je pensais juste que ce serait bien de partager. Je ne peux pas garantir l'efficacité de cela, mais lorsque vous essayez d'atteindre l'esthétique, vous êtes déjà condamné à des inefficacités.
C'est tout, je voulais juste ajouter mes deux cents.
la source
strValue.TrimEnd('0').TrimEnd('.')
place duEndsWith
chèque?Autre solution, basée sur la réponse de dyslexicanaboko, mais indépendante de la culture actuelle:
la source
Méthode d'extension:
Exemple de code:
Production:
la source
IndexOf
pour rechercher des caractères dans une chaîne. Il est assez facile d'ajuster l'exemple pour résoudre le problème sans décimales.Je ne pense pas que ce soit possible prêt à l'emploi, mais une méthode simple comme celle-ci devrait le faire
la source
C'est assez facile à faire hors de la boîte:
cela supprimera tous les zéros de fin de votre décimal.
La seule chose que vous devez faire est d'ajouter
.ToString().TrimEnd('0','.');
à une variable décimale pour convertir aDecimal
en aString
sans zéros de fin, comme dans l'exemple ci-dessus.Dans certaines régions, cela devrait être un
.ToString().TrimEnd('0',',');
(où ils utilisent une virgule au lieu d'un point, mais vous pouvez également ajouter un point et une virgule comme paramètres pour être sûr).(vous pouvez également ajouter les deux comme paramètres)
la source
params
argument, vous n'avez pas à construire un tableau explicitement. Donc, au lieu du verbeux,TrimEnd("0".ToCharArray())
vous pouvez simplement écrireTrimEnd('0')
(note: passé simplechar
au lieu de achar[]
).char
, pas unstring
(donc: des guillemets simples, pas des guillemets doubles). Je l'ai réparé pour vous - j'espère que cela ne vous dérange pas.la source
J'ai fini avec le code suivant:
la source
J'ai fini avec cette variante:
Avantages:
vous pouvez spécifier le nombre maximum de chiffres significatifs après le point à afficher au moment de l'exécution;
vous pouvez spécifier explicitement une méthode ronde;
vous pouvez contrôler explicitement une culture.
la source
Vous pouvez créer une méthode d'extension
la source
J'ai créé les méthodes d'extension ci-dessous pour moi-même pour s'adapter à l'un de mes projets, mais elles seront peut-être bénéfiques à quelqu'un d'autre.
Bien qu'il faudra une référence à
System.Numerics
.la source