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 :

Convertir une chaine de caractère (qui représente un nombre à virgule) en entier


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut Convertir une chaine de caractère (qui représente un nombre à virgule) en entier
    Bonjour

    Dans mon appli, je souhaite utiliser un memo afin de rentrer des données (ce sont des distances en kms) en colonne.

    Les données pourront être du style : 01.20 ou 1.230 ou 1.28 ou 10.15 ou 100.425 ou 120.4 ou 120.45 ... etc
    Cela représente des kilomètres. Le format doit pouvoir être variable.

    Je voudrais convertir ces données en mètres et les stocker dans un tableau d'integer. Bon stocker dans un tableau je sais faire ...

    C'est convertir en mètres (entiers) que je n'arrive pas à faire ...

    Il faudrait que mes données deviennent (si je les reprend dans l'ordre) :
    1200 puis 1230 puis 1280 puis 10150 puis 100425 puis 120400 puis 120450 .. etc ...

    Vous voyez le truc ?

    Je ne sais pas s'il existe des fonctions toutes faites ou s'il faut se la construire ... Dans le 2eme cas, comment ?

    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Tu peux utiliser la fonction StrToFloat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      S: String;
      Dist: Integer;
    begin
      S := '1.20';
      Dist := Trunc(StrToFloat(S) * 1000);  // Dist = 1200
    end;
    Attention cependant au séparateur décimal qui peux poser soucis. Voir le cas échéant le 2° paramètre de StrToFloat: FormatSettings.

    @+ Claudius

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ gillou026, marque le post précédent en "Résolu" svp.

    @+,

    Cincap

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 876
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    6
    Par défaut
    Bienvenue !

    Plutôt qu'un Memo, pourquoi pas un StringGrid ?

    Sinon, pour convertir une chaîne en réel : StrToFloat
    Puis x1000
    Puis conversion en entier avec Trunc

    Il est bon de prévoir les problèmes de conversion entre chaîne et réel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    S:=Trim(Chaine); // enlève les espaces de début et de fin
    try
      R:=StrToFloat(S);
      R:=1000*R;
      I:=Trunc(R);
    except
      on EConvertError do ShowMessage( 'Erreur de conversion de la valeur ' + Chaine );
    end;
    [EDIT = grillé... ]

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    Attention au caractère décimal utilisé dans les nombres de la chaine (, ou . ou les 2)
    Idem pour celui des milliers (. en US, espace en français)...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    j'ai effectivement un probleme avec la virgule.

    si j'utilise la virgule "," ça marche.
    si j'utilise le point "." du clavier numérique : erreur !!!!!

    comment faire pour que ça marche avec le "." ???

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    il faut travailler avec la variable DecimalSeparator.


    2 solutions:
    1 : Changer tous les caractères "faux" des nombres en texte par celui définit par DecimalSeparator(changer tous les points par des virgules)
    2 : Changer le DecimalSeparator en fonction du caractère décimal utilisé pour chaque nombre.

    la première solution à ma préférence

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    heuuuu là je comprend plus rien Olivier .. lol

    ça se code comment tout ça ???

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    utilises :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Str := StringReplace(Str, '.', DecimalSeparator, [rfReplaceAll, rfIgnoreCase]);
    Cela va remplacer tous les . par le caractère décimal utilisé pour les conversions

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    ça marche !
    c'est clair que je n'aurai pas trouvé tout seul ....

    merci

  11. #11
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Pour gérer les séparateur de decimales :

    Code : 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
    function SafeStrToFloat(S: string; var E: extended): boolean;
    var ODS: char;
    begin
      ODS := decimalSeparator;
      try
        if pos('.', S) <> 0 then
          decimalSeparator := '.'
        else
        if pos(',', S) <> 0 then
          decimalSeparator := ',';
     
        result := TryStrToFloat(S, E);
      finally
        decimalSeparator := ODS;
      end;
    end;

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/05/2007, 13h43
  2. Convertir une chaine de caractère en tableau
    Par Mysti¢ dans le forum Général Python
    Réponses: 7
    Dernier message: 09/04/2007, 12h20
  3. Réponses: 6
    Dernier message: 14/06/2006, 15h27
  4. [XSL] Convertir une chaine de caractère
    Par bahet dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/04/2006, 10h24
  5. [VB.NET] une chaine de caractère qui devient une propriete
    Par lucie.houel dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/09/2005, 14h10

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