9
votes

Affichage des zéros de fin sauf lorsqu'un nombre entier

Y a-t-il un moyen (en .NET) de supprimer des zéros de fin d'un numéro lorsque vous utilisez .tostring ("...") , mais pour afficher à 2 décimales si le nombre n'est pas un nombre entier:

  1. (12345.00) .Tostring (...) devrait afficher comme 12345
  2. (12345.10) .Tostring (...) doit s'afficher comme 12345.10
  3. (12345.12) .Tostring (...) doit afficher comme 12345.12

    Y a-t-il une chaîne de format 1 numéro qui fonctionnera dans tous ces scénarios?

    .tostring ("#. ##") Fonctionne presque mais ne montre pas la fuite 0 pour le scénario 2 ...

    En outre, d'autres cultures ne sont pas un problème, je veux juste un point décimal (pas une virgule, etc.)


4 commentaires

Essayez 0. # 0 ? 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)


8 Réponses :


6
votes

quelque chose sur ces lignes? XXX

EDIT

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.


3 commentaires

Pour un code légèrement plus lisible, je préférerais le format chaîne = (nombre% 1) == 0? "{0: 0}": "{0: 0.00}";


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.



0
votes

Je ne peux pas dire que j'ai rencontré un seul masque qui le fera. J'utiliserais xxx


0 commentaires

1
votes

pas en un format mais il convient à une ligne: xxx


0 commentaires

0
votes

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");
    }
}


0 commentaires

0
votes

Si vous souhaitez l'utiliser pour afficher la devise, vous pouvez utiliser la suite

float fVal = 1234.20f;
String strVal = fVal.Tostring("c");


0 commentaires

0
votes

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");
    }


0 commentaires

0
votes

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)  


0 commentaires

2
votes

Dirty Way:

string.Format("{0:0.00}", number).Replace(".00","")


1 commentaires

Cette approche renvoie 110 pour 11,0