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 :

Manipulation de nombres


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut Manipulation de nombres
    Bonjour à tous,
    J'ai un problème avec l'affichage d'un nombre à partir de 1000 car je retrouve le nombre avec un espace comme séparateur de millier et donc une erreur "1 196 n'est pas une valeur en virgule flottante correcte'. Même en configurant les paramétres régionaux, que nenni. Je me souviens avoir résolu le problème mais je ne me souviens plus comment ! Le système est Windows 7 et l'affichage se fait dans un TLabel.
    Auriez-vous (mais je n'en doute pas) la solution ?
    Merci. Cordialement

  2. #2
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    La mémoire est revenue, problème résolu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblMontantTotalSortie1.Caption := Format('%.0f',[TotalReglement1]);
    Cordialement à tous

  3. #3
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    bonsoir

    D'où récupères tu une valeur sous ce format dans Delphi ?
    D'un fichier ?
    Est-ce une 'chaine' ou un nombre ?

    A+
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  4. #4
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Bonjour,
    La variable <TotalReglement1> est un nombre issu de calculs, stocké dans une base de données et que je récupère dans la caption du TLabel <lblMontantTotalSortie1> pour affichage sur un tableau de bord. C'est là que j'avais un espace comme séparateur de millier, ce qui m'interdisais des calculs ultérieurs.
    C'est peut-être une solution barbare mais ça fonctionne.
    Cordialement

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je présume qu'avant ton utilisation de format tu utilisais quelque chose comme lblMontantTotalSortie1.Caption:=FloatToStr(TotalReglement1) ?
    Sans savoir que ce même FloatToStr dans les versions "modernes" de Delphi peut être utilisée avec un TFormatSettings.
    De même il me parait surprenant qu'il y ait un séparateur de milliers, quoique cela dépende de plusieurs facteurs dont les paramètres de windows et le type de TotalReglement1 (currency ?)

    La variable <TotalReglement1> est un nombre issu de calculs, stocké dans une base de données
    là je tique, un nombre issu de calcul, cela ne devrait pas être dans une base de données, mais je pense qu'il doit manquer une partie de phrase genre "issu de calculs entre colonnes d'une base de données" (ou quelque chose d'approchant)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Bonjour SergioMaster,
    Oui bien sûr, il manquait une précision : le nombre est issu de calculs entre 2 colonnes, voire plus. Et effectivement j'utilisais FloatToStr, et j'ignorais le reste (TFormatSettings). Je me rancarde tout de suite. Même si tout fonctionne, on peut toujours améliorer.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Ouf, je suis rassuré

    Pour ce qui est du TFormatSettings c'est surtout pour signaler cette possibilité, le bon vieux format est presque plus simple.
    Juste une chose Format('%.0f',[TotalReglement1]) pour un montant c'est donc un arrondi financier à l'entier ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Bien vu, c'est exactement ça ! Y aurait-il un loup ?

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Aucun loup (ou alors c'est que je ne l'ai pas vu)

    juste pour information j'ai tenté sans succès obtenir avec FloatToStr le séparateur de milliers
    voici un petit florilège des essais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var f : Currency;
        aFmtSettings : TFormatSettings;
    begin
    f:=3502.64;
    aFmtSettings:=TFormatSettings.Create;
    aFmtSettings.ThousandSeparator:='.';
    aFmtSettings.CurrencyFormat:=2;
    memo1.Lines.Add('FloatToStr '+FloatToStr(roundTo(f,0)));
    memo1.Lines.Add('FloatToStr fmtSettings '+FloatToStr(RoundTo(f,0),aFmtSettings));
    memo1.Lines.Add(Format('Format  %3.0f',[f]));
    memo1.Lines.Add(Format('Format  %3.0m',[f]));
    memo1.Lines.Add(Format('Format  %3.0m',[f],aFmtSettings));
    résultats
    FloatToStr 3503
    FloatToStr fmtSettings 3503
    Format 3503
    Format 3*503 €
    Format € 3.503
    jusqu'à ce que je fasse attention à l'erreur du début qui était, en fait, due à l'opération inverse (StrToFloat ?)

    Citation Envoyé par Maitre Yoda
    Si barbare te semble l'utilisation de Format possibilité tu as d'utiliser FloatToStr(RoundTo(TotalReglement1,0)) mais System.Math tu n'oublieras pas
    Le renard ,puisque loup il n'y avait, était plus dans la solution à ta question. Ton Format permettant de transformer un montant en chaine alors que l'erreur était sur la transformation d'une chaine formatée en valeur. Là, il est vrai que cette fonction semble manquer bien qu'elle soit assez facile à faire par exemple en utilisant des StringReplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function FloatValue(aString : String; aFmtSettings : TFormatSettings) : Extended;
        var s : String;
        begin
          s:=StringReplace(aString,aFmtSettings.CurrencyString,'',[rfReplaceall]);
          s:=StringReplace(s,aFmtSettings.ThousandSeparator,'',[rfReplaceall]);
          s:=StringReplace(s,aFmtSettings.DecimalSeparator,FormatSettings.DecimalSeparator,[rfReplaceall]);
          result:=StrToFloat(s);
        end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 176
    Points : 79
    Points
    79
    Par défaut
    Holà messieurs, tout doux ! Dans les controverses d'expert moi je baisse les bras et me retire sur l'Aventin ! Sérieusement, merci de vous être penchés sur mon problème car avec vous j'en apprends à tous les coups.
    Cordialement

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

Discussions similaires

  1. Manipuler des nombres > Long.MAX_VALUE
    Par J_Lennon dans le forum Langage
    Réponses: 2
    Dernier message: 13/06/2009, 01h21
  2. [Langage] Manipulation de nombres
    Par adil1251985 dans le forum Langage
    Réponses: 8
    Dernier message: 19/11/2008, 16h07
  3. Réponses: 4
    Dernier message: 01/10/2007, 17h57
  4. Manipuler des nombres en notation scientifique
    Par enrikomic dans le forum Mathématiques - Sciences
    Réponses: 6
    Dernier message: 11/07/2007, 13h14
  5. Réponses: 1
    Dernier message: 17/03/2006, 22h23

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