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

Delphi Discussion :

Enlever les zéros non significatifs


Sujet :

Delphi

  1. #1
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 43
    Points : 48
    Points
    48
    Par défaut Enlever les zéros non significatifs
    Bonjour à tous.

    Je cherche à convertir une chaîne de caratères représentant un nombre décimal sans les 0 non significatifs. Voila des exemples de ce que je voudrais obtenir :
    '76.0' => '76'
    '076' => '76'
    '76.1' => '76.1'
    '76.10' => '76.1'
    Je m'attendais à trouver une fonction comme cela assez facilement sans avoir à l'écrire moi-même mais impossible de trouver quelque chose.
    Quelqu'un connait une astuce ? sinon je le ferai moi-même.

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Regarde dans l'aide sous FormatFloat

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Voiçi deux trucs pour supprimer les 0 soit à gauche, soit à droite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function  TrimD0(s : string) : string; // suppr des 0 à droite
    begin     while s[length(s)]='0' do Delete(s,length(s),1); TrimD0:=s; end;
     
    function  TrimG0(s : string) : string; // suppr des 0 à gauche
    begin     while (length(s)>=1) and (s[1]='0')
              do Delete(s,1,1); TrimG0:=s; end;
    Mais attention, n'utiliser la suppression à droite qu'après avoir testé si la string contient le DecimalSeparator sinon la fonction retourne par exemple 22 si la string d'entrée est 2200000

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if pos(DecimalSeparator,maChaineNumerique) > 0
    then maChaineNumerique:=TrimD0(maChaineNumerique) ;

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaValeur := FormatFloat('#0',StrToFloat(StringReplace('76.1','.',',',[rfReplaceAll])));

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Attention avec StringReplace car StringReplace('76.1','.',',',[rfReplaceAll]) ne fait que remplacer le point de 76.1 par une virgule.

  6. #6
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Malatar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaValeur := FormatFloat('#0',StrToFloat(StringReplace('76.1','.',',',[rfReplaceAll])));
    Ca ne marche pas comme je veux. Si je tape '76.10', c'est '76' qui est retourné alors que je veux '76.1'. Mais je ne pense pas que FormatFloat puisse m'aider (j'avais tenté avant aussi).

    Finalement, j'ai trouvé un truc tout bête et ça m'a l'air bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaValeur := FloatToStr(StrToFloat(Trim('0760.0100')));
    Merci pour l'aide.

  7. #7
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par Keke des Iles
    Ca ne marche pas comme je veux. Si je tape '76.10', c'est '76' qui est retourné alors que je veux '76.1'. Mais je ne pense pas que FormatFloat puisse m'aider (j'avais tenté avant aussi).

    Finalement, j'ai trouvé un truc tout bête et ça m'a l'air bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaValeur := FloatToStr(StrToFloat(Trim('0760.0100')));
    Merci pour l'aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const
       S = '076.10';
     
    var
       D: double;
     
    begin
       D := StrToFloat(StringReplace(S, '.', DecimalSeparator, []));
     
       Showmessage(FormatFloat('#0.#', D));  //Ça affiche "76.1"
    end;

  8. #8
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par slimjoe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const
       S = '076.10';
     
    var
       D: double;
     
    begin
       D := StrToFloat(StringReplace(S, '.', DecimalSeparator, []));
     
       Showmessage(FormatFloat('#0.#', D));  //Ça affiche "76.1"
    end;
    C'est presque bon, mais il reste encore une faille si on tape '76.01'. Ca retourne '76'.

  9. #9
    Membre habitué
    Développeur .NET
    Inscrit en
    Juin 2002
    Messages
    274
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2002
    Messages : 274
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Keke des Iles
    C'est presque bon, mais il reste encore une faille si on tape '76.01'. Ca retourne '76'.
    Forcément puisque tu lui demandes d'afficher une décimale si elle existe ; en l'occurence 76.01 arrondi au dixième ça fait 76.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const
       D1 = 76.01;
       D2 = 76.09;
     
    begin   
       Showmessage(FormatFloat('0.#', D1));   //Ça affiche "76"
       Showmessage(FormatFloat('0.##', D1));  //Ça affiche "76.01"
       Showmessage(FormatFloat('0.#', D2));   //Ça affiche "76.1"
    end;

  10. #10
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2013
    Messages : 1
    Points : 3
    Points
    3
    Par défaut C'est exactement ça que je cherche
    Merci infiniment à vous * Gilbert Geyer*.
    Les deux fonctions fonctionnent parfaitement.
    C'est exactement ça que je cherche.

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

Discussions similaires

  1. Conserver les zéros non significatifs
    Par pc75 dans le forum ASP
    Réponses: 19
    Dernier message: 13/02/2009, 07h31
  2. Eliminer des zéros non significatifs
    Par maubeuge59 dans le forum Cobol
    Réponses: 16
    Dernier message: 15/01/2008, 23h25
  3. garder les zéros non significatif
    Par Michelk12 dans le forum Informix
    Réponses: 3
    Dernier message: 15/12/2007, 14h54
  4. enlever les zéro dans un champs
    Par shirya dans le forum ASP.NET
    Réponses: 4
    Dernier message: 26/03/2007, 18h01
  5. Réponses: 3
    Dernier message: 12/09/2006, 12h53

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