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

Langage Delphi Discussion :

Changer StrToFloat


Sujet :

Langage Delphi

  1. #1
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut Changer StrToFloat
    Salut,
    je veux bien changer la function StrToFloat comme suis:
    Borland code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function StrToFloat(const S: string): Extended;
    begin
      if not TextToFloat(PChar(S), Result, fvExtended) then
        ConvertErrorFmt(@SInvalidFloat, [S]);
    end;
    Mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function StrToFloat(const S: string): Extended;
    begin
      s:= AnsiReplaceStr(s, '.', '') ;
      if not TextToFloat(PChar(S), Result, fvExtended) then
        ConvertErrorFmt(@SInvalidFloat, [S]);
    end;
    jai changer la ligne dans SysUtils mais ca na pas marcher !!!
    si quelqun peut me donner un coup de main
    Merci
    Apprends la science de celui qui sait, et enseigne ta science à celui qui ignore, comme ca, tu auras appris ce que tu ignores et utilisé ce que tu sais.

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Qu'est-ce qui n'a pas marché ?

    Erreur de compile, runtime, logique ?

    si je comprends bien tu veux enlever le Point décimal avant toute conversion ... ?
    et de surcroit directement dans les sources Delphi ?

    Je ne comprends pas trop l'interet

    Sinon essaye avec


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function StrToFloat(const S: string): Extended; 
    var
      s2: string;
    begin 
      s2:= StringReplace(s, '.', '', [ rfReplaceAll ] ) ; 
      if not TextToFloat(PChar(S2), Result, fvExtended) then 
        ConvertErrorFmt(@SInvalidFloat, [S2]); 
    end;
    explique qd même l'interet d'aller changer une telle fonction dans les sources Delphi, gare aux projets suivants !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    rbh
    rbh est déconnecté
    Membre confirmé Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Points : 473
    Points
    473
    Par défaut
    Salut
    Je ne sait pas si cest ce que tu veux mais moi je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function StrToFloat(const S: string): Extended;
    var
      s2: string;
    begin
      s2:= StringReplace(s, '.', DecimalSeparator, [ rfReplaceAll ] ) ;
      s2:= StringReplace(s2, ',', DecimalSeparator, [ rfReplaceAll ] ) ;
     
      if not TextToFloat(PChar(S2), Result, fvExtended) then
        ConvertErrorFmt(@SInvalidFloat, [S2]);
    end;
    Ainsi, tu convertira tous les float peut importe le séparateur décimal.

  4. #4
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut
    1- A ta place je ne bidouillerait pas dans les units Delphi, sa fou le bordelle et si une autre unitee utilise cette fonction, il peu en resulter n'importe quoi. Pour modifier ta Fonction, tu recupert le code de SysUtils, tu renome ta fonction par exemple "StringToFloat" (tu la met dans une unit personnelle ou sinon dans ton project directement), et la tu fait ce que tu veu.

    2-
    mais ca na pas marcher
    qu'est ce qui n'a pas marcher ?

    Edit : 3 a poster en meme temps

  5. #5
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    rbh

    +1, c'est plus logique...
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  6. #6
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    SORRY jai pas bien poster ma Question,
    le probleme c que je sorte une ListView et en particulier une Cologne qui contient des Valeurs Floats formater par: #,##0.00
    alor pour faire un sort sur les Floats je dois faire:
    StrToFloat(Item.subItems[3]).
    Alor je me suis dit denlever le point de sepparation avant de convertir !!!
    Apprends la science de celui qui sait, et enseigne ta science à celui qui ignore, comme ca, tu auras appris ce que tu ignores et utilisé ce que tu sais.

  7. #7
    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
    De plus, je vois pas pourquoi tu veux faire ça directement dans l'unité.

    je crois que tu veux supprimer le séparateur décimal d'une valeur float, alors pourquoi ne pas faire la modification au moment ou tu en as besoin plutot que de vouloir modifier une fonction générique a tous les projets ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function  NoSeparatorFloat (MonFloat: Extended) : String;
    var
      MonString : String;
    begin
      MonString := FormatFloat('0.00',MonFloat);
      Result := AnsiReplaceStr(MonString, '.', '') ;
    end;
    C'est pas plus simple ?

    Car avec ce que tu fais, imagine que tu es un float = 12.0002251255201212.
    Enleve le . et met le en float, tu vas voir ce qu'il va te dire delphi
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    ca ne marchera pas mieux ton tri,

    tu auras un truc du style

    1
    11
    12
    2
    3
    ...
    Ce que tu veux pas je suppose

    Je n'ai pas Delphi sous la main, je ne peux regarder l'aide
    mais en principe, tu devrais avoirs ta list dans un TStrings

    tu peux alors définir toi même ta fonction de tri (qui est par défaut alphanumérique et ca convient pas pour des nombre)

    SINON,
    tu peux convertir des nombres, mais a ce compte, sil faut que
    - tu multiplies tout tes réels par 1000 (par exemple, je ne connais pas la grandeur moyenne de tes nombre)
    - que tu les arrondisses en entier
    - que tu les formattes dans une chaine de taille fixes et maximum (20 car par exemple) en cadrant ton nombre à droite et en prefixant de 0

    et là, le tri alpha, correspondra au tri numérique

    Mais à mon avis, avant de faire ca,
    mets tout tes nombres dans un TStringList, et 'd'overloader' la fonction de tri de la TStringList (F1 dessus, c'est bien expliqué il me semble), et dans cette fonction propre de tri, tu pourras réellement comparer 2 réels, en effectuant sur StrToFloat sur tes éléments
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  9. #9
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    c un peut complex ce que tu veux faire TicTacToe.
    Car dans ma ListView jai des Valeurs comme:
    Valeur:= '13.555,34';
    alor le StrToFloat Standart me dit que 13.555,34 n'est pas un Float, ce qui
    fait le Converterror. Lorsque jenleve le point ya pas de converterror, alor la Solution est simple il suffit denlever le point de la Formatation, et c pour cela que me je suis dit de le faire direct dans Lunit SysUtils
    Apprends la science de celui qui sait, et enseigne ta science à celui qui ignore, comme ca, tu auras appris ce que tu ignores et utilisé ce que tu sais.

  10. #10
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    pas bonne idée du tout ! c'est un conseil.

    Lorsque tu dis

    Valeur:= '13.555,34';

    quelle est la vraie valeur de ton réel théoriquement ?
    Est-ce que c'est pas plutot 2 valeurs sur une seule ligne séparée par une virgule ?

    Dans ce cas pour les séparer facilement du peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      Valeur1, Valeur2: Extended;
     
    Valeur := StringReplace( Valeur, ',', '|', [ rfReplaceAll ] )
    Valeur1 := StrToFloat( GetShortHint( Valeur ) );
    Valeur2 := StrToFloat( GetLongHint( Valeur ) );
    Ensuite, le tri, comme je t'ai dit, il y a une solution simple (affectation de ta propre fonction de comparaison dans un TSTringList), ou la solution plus compliquée pour formater un nombre en chaine de telle manière que le tri Alpha = Tri numérique
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  11. #11
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    Merci pour laide
    Apprends la science de celui qui sait, et enseigne ta science à celui qui ignore, comme ca, tu auras appris ce que tu ignores et utilisé ce que tu sais.

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

Discussions similaires

  1. Changer l'image d'une texture
    Par alltech dans le forum DirectX
    Réponses: 5
    Dernier message: 21/08/2002, 01h31
  2. TextOut : comment changer de font
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 15/07/2002, 20h46
  3. Réponses: 2
    Dernier message: 26/06/2002, 13h16
  4. changer de repertoire et situer
    Par chateau dans le forum C
    Réponses: 4
    Dernier message: 24/06/2002, 11h27
  5. changer l'adresse d'un fichier...
    Par cava dans le forum C
    Réponses: 6
    Dernier message: 05/06/2002, 12h22

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