IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

connaitre le nombre de chiffre après la virgule d'un nombre, et ce peu importe le type


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Points : 83
    Points
    83
    Par défaut connaitre le nombre de chiffre après la virgule d'un nombre, et ce peu importe le type
    bonjour

    voilà je sais qu'il y a de nombreuses façons de formater le nombre de chiffres après la virgule, mais comment savoir si ce nombre a des chiffres après la virgule??

    prenons un exemple

    je veux dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(n a des chiffres après la virgule)
     return n.value.toString(#0.00);
    else
     return n.toString();
    le but vous l'aurez compris est de ne pas avoir un rendu du genre 9,00 si ma valeur est 9, ou bien 9,9 alors que j'attends 9,90..

    ou plus simple comment caster mon type double en type monnaie ??

    merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 502
    Points
    1 502
    Par défaut
    Salut,

    Essaie en vrac:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    string[] plop = monNombre.toString().split(',');
    if(plop.length == 2)
    {
      return plop[1].length;
    }
    return 0;

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par johnaliashead Voir le message
    ou plus simple comment caster mon type double en type monnaie ??
    Il n'y a pas de type monnaie, mais il y a un type decimal qui est est parfaitement adaptée pour les calculs financiers. Pour convertir, il suffit de faire un cast :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int w = 42;
    decimal x = (decimal)w;
    double y = 42.0;
    decimal z = (decimal)y;
    Par contre tes critères pour le format ne sont pas très clairs... tu veux afficher les 0 non significatifs ou pas ?

  4. #4
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Bonjour,

    Si l'idée (du moins ce que j'en ai compris ) c'est de sortir des formats monétaires de valeurs numériques alors on est pas obliger d'utiliser un format personnalisé, par contre il faudrait rajouter la culture à prendre en compte car la sortie peut totalement différer:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    using System.Collections.Generic;
    using System.Globalization;
    using System.Text;
     
    //...
     
    decimal value = 9.0;
    List<CultureInfo> cultures = new List<CultureInfo>();
    StringBuilder result = new StringBuilder();
     
    cultures.Add(CultureInfo.InvariantCulture);
    cultures.Add(CultureInfo.CreateSpecificCulture("fr-FR"));
    cultures.Add(CultureInfo.CreateSpecificCulture("en-GB"));
    cultures.Add(CultureInfo.CreateSpecificCulture("en-US"));
    cultures.Add(CultureInfo.CreateSpecificCulture("es-ES"));
     
    foreach (CultureInfo culture in cultures)
    {
        result.AppendLine(culture.Name + " " + value.ToString("C", culture));
    }
     
    MessageBox.Show(result.ToString());

    Ce code affichera donc :
    ¤9.00
    fr-FR 9,00 €
    en-GB £9.00
    en-US $9.00
    es-ES 9,00 €
    ce qui me semble convenir à ce que tu souhaites
    Note: j'ai interprété cette phrase
    le but vous l'aurez compris est de ne pas avoir un rendu du genre 9,00 si ma valeur est 9, ou bien 9,9 alors que j'attends 9,90..
    comme "le but est d'obtenir 9,90 et 9,00 pour les entrées respectives 9.9 et 9."

    En espérant avoir pu aider

  5. #5
    Invité
    Invité(e)
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double n = 9;
    string chaine = n.ToString("#0.00").TrimEnd('0').TrimEnd(',');
    Pas besoin de test, ça marche dans tous les cas. Ca vire les zéros superflus, y compris après la virgule pour les nombres entiers.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Gastiflex Voir le message
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double n = 9;
    string chaine = n.ToString("#0.00").TrimEnd('0').TrimEnd(',');
    Il servent à rien tes TrimEnd, il suffit d'utiliser comme format "0.##"
    0 = un chiffre obligatoire (si c'est 0, il sera affiché quand même)
    # = un chiffre pas obligatoire (0 non significatifs supprimés)

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Points : 83
    Points
    83
    Par défaut
    merci pour toutes ces réponses.. mais il me semble que ça ne convienne pas encore.. je réexplique c'est vrai que je me suis assez mal expliqué dans le premier message...

    pour ma question sehnsucht, ce que je voulais dire c'était cela:

    si mon double = 9 alors j'affiche 9 et non 9,00
    si mon double = 9,9 alors j'affiche 9,90

    en fait le premier cas est géré correctement avec mon tostring()
    en revanche si mon double est égal à 9,9 en saisie je veux afficher 9,90 (ajouter un zéro en fait) le but est de gérer des euros avec des doubles, car le fait de mettre la culture me donnera 9,00 pour un double égal à 9 et ça je ne souhaite pas l'avoir..

    donc pour résumer si mon double n'a pas de chiffre après la virgule on ne les affiche pas, et si il a un ou deux chiffres après la virgule, on affiche obligatoirement 2 chiffres après la virgule...


    voilà je pense avoir été plus clair cette fois

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ok, et si tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n.ToString("#0.00").Replace(",00", "")

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par johnaliashead Voir le message
    si mon double = 9 alors j'affiche 9 et non 9,00
    si mon double = 9,9 alors j'affiche 9,90
    C'est bien ce que j'avais cru comprendre... mais ça me semblait tellement tordu que je pensais avoir mal compris

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Gastiflex Voir le message
    Ok, et si tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n.ToString("#0.00").Replace(",00", "")
    ça marche bien tant qu'on est en français mais si tu es sur une machine avec une autre culture info ça marchera pas à cause de la "," dans le replace. (ex ça marche pas en us pour 9.00)

    du coup tu peux soit faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n.ToString("#0.00",CultureInfo.CreateSpecificCulture("fr-FR")).Replace(",00", "")
    ce qui est moche à mon goût...

    ou mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string chainToReplace = Application.CurrentCulture.NumberFormat.CurrencyDecimalSeparator + "00";
    string res = n.ToString("#0.00").Replace(chainToReplace, "");
    ce qui devrait marcher indépendamment de l'environnement dans lequel marche ton appli (remarque remplacer "CurrencyDecimalSeparator" par "NumberDecimalSeparator") pour traiter les nombres en général

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Points : 83
    Points
    83
    Par défaut
    ah voilà c'est ça que j'attendais

    merci beaucoup !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Limiter le nombre de chiffre apres la virgule ?
    Par MaxiMax dans le forum ASP.NET
    Réponses: 3
    Dernier message: 01/08/2011, 14h20
  2. Réponses: 2
    Dernier message: 09/06/2008, 14h43
  3. Limiter nombre de chiffre apres la virgule
    Par MaxiMax dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/08/2005, 12h02
  4. arrondir un nombre à 2 chiffres après la virgule
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/02/2005, 08h36
  5. [MFC] Nombre de chiffres après la virgule
    Par karl3i dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2004, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo