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 :

Calcul avec nombre à virgule


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut Calcul avec nombre à virgule
    Bonjours a tous,

    J'ai un calcul assez complexe qui me permettra de calculer une production horaire.
    mon code est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var AFQ,AFR,A1:real ;
    begin
    AFQ:=StrToInt(NivFer.Text)mod 2;
    AFR:=StrToInt(FloatToStr(StrToInt(NivFer.Text)/ 2));
    A1:=((((((1+ AFQ)*AFQ)+((AFQ+1)*AFR)))*10)+((((AFR+1)/ 2))*2)+10);
     
    FerDispo.Text:=FloatToStr(A1);
    end;
    Quand je tape un nombre impaire dans la zone de saissie, le resultat obtenu au court du calcul est "X,5" et l'application me renvoie une erreur comme quoi X,5 n'est pas une valeur entiere.
    J'ai regarder dans les differents post dans le forum, mais j'ai rien trouver pouvant m'aider a resoudre le probleme.
    J'ai tenter aussi de mettre les variables en Integer, extended mais rien n'y fait.

    Je pense que c'est un probleme de declaration de type de variable mais je n'y arrive pas pouvez vous m'aider s'il vous plait ?
    merci

  2. #2
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    noraml:
    Citation Envoyé par stefano
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var AFQ,AFR,A1:real ;
    begin
    AFQ:=StrToInt(NivFer.Text)mod 2;
    AFR:=StrToInt(FloatToStr(StrToInt(NivFer.Text)/ 2));
    A1:=((((((1+ AFQ)*AFQ)+((AFQ+1)*AFR)))*10)+((((AFR+1)/ 2))*2)+10);
    
    FerDispo.Text:=FloatToStr(A1);
    end;
    floattostr va te donner x,5 alors strtoint ne peut vous le convertit, tu es pas en vb ici
    en plus ton code est mal fait,

  3. #3
    Membre chevronné
    Inscrit en
    Octobre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 338
    Par défaut
    bonsoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    var AFQ,AFR,A1:real ;
    begin
      AFQ:=StrToInt(NivFer.Text)mod 2;  //  retourne 0 ou 1 que sur des valeur entières
                                        // sinon plantage!
      AFR:=StrToInt(FloatToStr(StrToInt(NivFer.Text)/ 2)); // valeurs entières ou non vide sinon plantage!
      A1:=((((((1+ AFQ)*AFQ)+((AFQ+1)*AFR)))*10)+((((AFR+1)/ 2))*2)+10);
    // pour moi: ((((AFR+1)/ 2))*2) = (AFR+1)
    
      FerDispo.Text:=FloatToStr(A1);
    end;
    un peu plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    var 
      AFQ, AFR, A1   : real ;
    begin
    //  faire un test NivFer.Text <> ''  sinon plantage!!
      AFQ := frac(StrtoFloat(NivFer.Text));
      AFR := StrtoFloat(NivFer.Text)/ 2; 
      A1:=((((((1+ AFQ)*AFQ)+((AFQ+1)*AFR)))*10)+(AFR+1)+10);
      FerDispo.Text:=FloatToStr(A1);
    end;
    à plus

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    merci pour le coup de main c'est tres sympa

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

Discussions similaires

  1. calcule de PI avec nombre préci de chiffres aprés la virgule!
    Par do_key_120 dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 17/10/2007, 22h58
  2. Calcule avec des virgules
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/07/2007, 09h43
  3. [VBA-Excel] Tri de listview ne fonctionne pas avec des nombres à virgule
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/09/2006, 15h32
  4. Probleme dans un calcul avec un nombre negatif
    Par el_quincho dans le forum Access
    Réponses: 4
    Dernier message: 05/06/2006, 14h18
  5. problème avec les nombres à virgule
    Par shingo dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2006, 18h30

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