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 :

passer d'un int to curr (float)


Sujet :

Delphi

  1. #1
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut passer d'un int to curr (float)
    bonjour,

    je souhaite trouver une façon de convertir un int en nb à virgule le tps d'un calcul de façon simple:

    exemple: (225 - 150)*(100/150) // ici on aura 100/150 = 0 en int..

    savoir s'il existe une fonction ou pas...

    bien sur on peut ecrire (((225-150)*100)/150)... mais je cherche une fonciton pour ma culture personnelle lol

    ludo

  2. #2
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    inttofloat

  3. #3
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut
    ?? inttofloat?

    C'est ce que j'ai testé en premier... Ca marche pas... sigh

    y a til un truc a savoir en particulier? :s

    ludo

  4. #4
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    non il me semble pas inttofloat(un entier);

  5. #5
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut
    bon.. je m'en souviendrais pour une utilisation plus "normale" mais ici ça marche pas...

    merci qd même

    ludo

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    J'ai pas tout compris

    100/150 est bien un flottant, contrairement à 100 div 50 ...

    Tu peux forcer un flottant en écrivant 100.0, mais c'est peu utile. Delphi se débrouille tout seul la plupart du temps et on peut toujours utiliser des entiers à la place des flottants (sauf exception, paramètres var par exemple)
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  7. #7
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    tu voudrais avoir un résultat en interger avec une opération en flottants ?

    regarde du coté des fonctions round, trunc et int

    par exemple, round((225 - 150)*(100/150))

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 951
    Points
    3 951
    Par défaut
    Coercition ... (cherche sur Google qui va devenir ton ami)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (double(225) - 150)*(double(100)/150)
    devrait fonctionner (non testé)

    cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Heu ...
    Plus je lit cette discussion, moins je pige

    @ bjl : le titre de la discussion est bien de passer d'un entier à un flottant et non l'inverse

    @ e-ric : ça marche peut-être mais ça me parait parfaitement inutile ...

    En fait la transformation entier -> flottant est native dans le compilateur
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut


    (225 - 150) = 75
    (100/150) = 0.6666666667
    (225 - 150)*(100/150) = 50

    Calcul Flottant obligatoire ...

    ensuite IntToFloat n'a aucun sens en mathématique, c'est juste un transypage ? MonDouble := MonEntier avec Double(MonEntier) implicite

    ensuite on peut écrire ceci ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (225.0 - 150.0)*(100.0/150.0)
    je suis comme J-P-B, je ne comprends le problème ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Une solution consiste à multiplier par 1.0:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    1.0*(225 - 150)*(100/150)
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Linkin
    Une solution consiste à multiplier par 1.0
    çà change quoi au résultat ?
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  13. #13
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut
    Merci pour vos indications

    multiplier par 1.0 permet de'indiquer le format float.

    mon problème tout simplement est que lorsque j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var
       var_X, origin.X, X_max : integer;
     
    var_X:= round((FPoints[ii].X - origin.X) * (X_max div origin.X))
    Le résultat est zero

    alors j'ai posé cette question pour avoir un max d'indication sur le format float:

    maintenant je fais cela:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var
       var_X, origin.X, X_max : integer;
     
    var_X:= round(((FPoints[ii].X - origin.X) * X_max) div origin.X)
    c'est con mais ça marche

    voila

    merci

    ludo

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Pourquoi ne pas avoir posté ce code avant ... cela aurait évité 10 messages inutiles

    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
     
    procedure TFrmTestALaCon.BtnCalculFloattantClick(Sender: TObject);
    var
       var_X, FPoints_X, origin_X, X_max : integer;
    begin
      ShowMessage(FloatToStr((225 - 150)));
      ShowMessage(FloatToStr((100/150)));
      ShowMessage(FloatToStr((225 - 150)*(100/150)));
      ShowMessage(FloatToStr((225.0 - 150.0)*(100.0/150.0)));
      FPoints_X := 225;
      origin_X := 150;
      X_max := 100;
      var_X:= round((FPoints_X - origin_X) * (X_max / origin_X));
      ShowMessage(IntToStr(var_X));
    end;
    Ce devrait fonctionner, div c'est la division entière, / la division flottante ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_X:= round((FPoints[ii].X - origin.X) * (X_max / origin.X))
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  15. #15
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut
    Ces dix messages m'ont apporté des précisions sur des utilisations de fonctions courantes comme div et / tout simplement.

    Ce devrait fonctionner, div c'est la division entière, / la division flottante ...
    C'est ce dont je me suis aperçu grâce à vos messages... alors inutile pour toi peut-être, dslé de t'avoir fait perdre ton temps, moi je débute et j'ai des questions un peu con des fois.

    merci qd même

    ludo

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Ha !

    Le problème vient donc des opérateurs : ( sur div)
    "div" fait une division entière et renvoi toujours un entier
    "/" fait une division réelle et renvoi toujours un flottant

    si

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_X:= round((FPoints[ii].X - origin.X) * (X_max div origin.X))
    si origin.X > X_max alors (X_max div origin.X) vaut 0 donc var_X = 0 !!

    Et aussi, dans ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_X:= round(((FPoints[ii].X - origin.X) * X_max) div origin.X)
    le round est inutile, étant donné que "div origin.X" renvoi forcément en entier

    JP

    EDIT : désolé pour le post inutile, je suis un peu lent des fois
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  17. #17
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    Citation Envoyé par J-P-B
    Heu ...
    Plus je lit cette discussion, moins je pige

    @ bjl : le titre de la discussion est bien de passer d'un entier à un flottant et non l'inverse

    @ e-ric : ça marche peut-être mais ça me parait parfaitement inutile ...

    En fait la transformation entier -> flottant est native dans le compilateur
    JPB
    si j'ai bien compris, il veut faire une opération en flottant et avoir le résultat en integer.

    l'opérateur / renverra toujours un flottant

  18. #18
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Ludo_360
    Ces dix messages m'ont apporté des précisions sur des utilisations de fonctions courantes comme div et / tout simplement.



    C'est ce dont je me suis aperçu grâce à vos messages... alors inutile pour toi peut-être, dslé de t'avoir fait perdre ton temps, moi je débute et j'ai des questions un peu con des fois.

    merci qd même

    ludo
    Oui, bah c'est bon hein ?
    Pas la peine d'en faire un drame non plus !

    Copains
    Bidouilleuse Delphi

  19. #19
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut =)
    dslé fatigué... mais c'était pas un drame, pa du tou =)

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/05/2010, 20h18
  2. Sommer un int et un float
    Par Yunchi dans le forum Débuter
    Réponses: 11
    Dernier message: 07/04/2009, 17h49
  3. Comment bien entrer un int ou un float
    Par Invité1 dans le forum C
    Réponses: 5
    Dernier message: 25/08/2008, 00h56
  4. Passer d'une int list a une string list
    Par slayer___ dans le forum Caml
    Réponses: 1
    Dernier message: 08/05/2008, 16h46
  5. Réponses: 4
    Dernier message: 18/02/2007, 20h03

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