Y a-t-il un moyen (en .NET) de supprimer des zéros de fin d'un numéro lorsque vous utilisez Y a-t-il une chaîne de format 1 numéro qui fonctionnera dans tous ces scénarios? p>
En outre, d'autres cultures ne sont pas un problème, je veux juste un point décimal (pas une virgule, etc.) p> .tostring ("...") code>, mais pour afficher à 2 décimales si le nombre n'est pas un nombre entier: p>
.tostring ("#. ##") code> Fonctionne presque mais ne montre pas la fuite 0 pour le scénario 2 ... P>
8 Réponses :
quelque chose sur ces lignes? EDIT P> Il y a un petit bogue dans ce code si :) 1.001 sera imprimé comme "1,00" ... Peut-être pas ce que vous voulez, si vous devez imprimer 1.001 comme "1", vous devez modifier le test IF (...) pour vérifier une tolérance finie. Comme cette question est davantage sur le formatage, je laisserai la réponse inchangée mais dans le code de production, vous voudrez peut-être envisager ce type de problème. P> p>
Pour un code légèrement plus lisible, je préférerais le format chaîne = (nombre% 1) == 0? "{0: 0}": "{0: 0.00}"; code>
Oui, je suis allé avec cela d'abord, mais je pensais que le "long chemin" était plus clair dans le contexte de répondre à la question. Je voudrais probablement utiliser votre style dans le code réel.
Ce n'est pas tout à fait ce que je cherchais, car je voulais lier directement au numéro sur une page ASP.NET et utilisez la chaîne de format pour déterminer la manière dont elle est affichée. J'ai cependant utilisé cette approche pour ajouter une autre variable à mes reliures et se lier à cela (en tant que chaîne) à la place.
Je ne peux pas dire que j'ai rencontré un seul masque qui le fera. J'utiliserais
pas en un format mais il convient à une ligne:
Je suppose que vous pouvez faire votre propre méthode pour produire cet affichage, car il est conditionné à savoir s'il s'agit ou non d'un entier.
public static class Extensions { public static string ToCustomString(this decimal d) { int i = (int)d; if (i == d) return i.ToString(); return d.ToString("#.00"); } }
Si vous souhaitez l'utiliser pour afficher la devise, vous pouvez utiliser la suite
float fVal = 1234.20f; String strVal = fVal.Tostring("c");
Vous pouvez écrire une méthode d'extension comme celle-ci pour effectuer le formatage de vous:
public static string FormatNumberString(this double input) { int temp; string inputString = input.ToString(); return Int32.TryParse(inputString, out temp) ? inputString : input.ToString("0.00"); }
Si vous cherchiez à le faire dans ASP MVC RAZOR, vous pouvez essayer ceci
@string.Format(item.DecimalNumber % 1 == 0 ? "{0:0}" : "{0:0.00}", item.DecimalNumber)
Dirty Way:
string.Format("{0:0.00}", number).Replace(".00","")
Cette approche renvoie 110 pour 11,0
Essayez
0. # 0 code>? Je n'ai pas essayé cela et je ne suis pas sûr de savoir comment cela va réagir dans l'ensemble du nombre.
Il n'y a pas de format unique pour cela. En outre, que voulez-vous 12345.001 à afficher comme? 12345.00 (rond à 2 décimales car ce n'est pas un nombre entier) ou 12345 (le nombre arrondi à 2 décimales est un nombre entier, alors supprimez-vous des zéros traînants)?
Pour les nombres entiers, cela affiche 12345.00
@Joe C'est un bon point que j'ai manqué, j'affiche essentiellement des montants en espèces. Je ne veux donc pas montrer "12345.00". Donc, ma question n'est pas réellement de chiffres entiers, il ne s'agit pas de ne pas afficher ".00" (ce qui signifie que je devrai utiliser une solution légèrement différente)