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

C++ Discussion :

Type entier vers flottant.


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Tech maintenance Info
    Inscrit en
    août 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Tech maintenance Info
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2009
    Messages : 209
    Points : 93
    Points
    93
    Par défaut Type entier vers flottant.
    Bonjour,
    Quelqu’un pourrait m’expliquer comment modifier cette constante pour que le résultat affiche un arrondie au plus proche à 2 chiffres après la virgule ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //Extrapolation de 173° à 180° = 2559,306358381503
     
    const int T180=520+(((2480-520)/173)*180);
    Ici 2559,31

    Merci pour votre aide.

  2. #2
    Expert éminent
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    3 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 3 056
    Points : 6 751
    Points
    6 751
    Par défaut
    il faut relire tes cours sur la notion de type int, float, ...

    Et une autre précision , en C et C++, les opérations (+, *, / et -) prennent le type le "plus large" pour calculer.
    Donc int/ int donne une division entière et non pas une division flottante

    mais évidemment, il faut que ta variable puisse accepter le résultat sans troncature.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        const int T180 = 520+(((2480-520)/173)*180);
        const float T180_01 = 520+(((2480-520)/ (float) 173)*180);
        const float T180_02 = 520+(((2480-520)/ 173.0)*180);
     
        std::cout << "value : " << T180 << ", value : " << T180_01 << ", value : " << T180_02 << std::endl;

  3. #3
    Membre régulier
    Homme Profil pro
    Tech maintenance Info
    Inscrit en
    août 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Tech maintenance Info
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2009
    Messages : 209
    Points : 93
    Points
    93
    Par défaut
    J’avoue être un peu largué, auriez-vous un petit exemple concret ?

  4. #4
    Membre confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : mai 2013
    Messages : 91
    Points : 538
    Points
    538
    Par défaut Illustration
    Bonjour,

    Ce qu'explique Foetus peut s'illustrer ainsi :

    • 7/3 donne 2 (int /int -> int)
    • 7.0/3 ou 7/3.0 ou 7.0/3.0 donnent 2.3333... (float/int -> float, int/float -> float, et bien sûr float/float -> float)

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  5. #5
    Expert éminent
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    3 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 3 056
    Points : 6 751
    Points
    6 751
    Par défaut
    En même temps, je ne sais pas quoi dire entre @NeriXs qui passe plus de temps à poster au lieu de mettre des nombres flottants/ réels partout (quitte à créer autant de variables que de valeurs fixes) et le fait qu'il (et @Guesset apparemment ) ne sache pas utiliser la balise spoiler (divulgâcher en bon françois, il faut appuyer sur le bouton montrer à droite)

  6. #6
    Membre régulier
    Homme Profil pro
    Tech maintenance Info
    Inscrit en
    août 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Tech maintenance Info
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2009
    Messages : 209
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par foetus Voir le message
    En même temps, je ne sais pas quoi dire entre @NeriXs qui passe plus de temps à poster au lieu de mettre des nombres flottants/ réels partout (quitte à créer autant de variables que de valeurs fixes
    Désolé, j'essaie toujours de mettre la charrue avant les bœufs

    Citation Envoyé par foetus Voir le message
    et le fait qu'il (et @Guesset apparemment )
    Là, je n'ai pas tous compris.

    -------------------------------------------------------------------------------------

    Pour en revenir à mon code!

    Les valeurs affichées sont bonnes:

    Bienvenue sur le moniteur série.
    L'extrapolation à 180°, de 173° entre la butée mini: 520 µS et la butée maxi: 2480 µS est égale à: 2559.31 µS.
    1° est égale à 11.33 µS.

    0° = 520.00 µS
    1° = 531.33 µS
    173° = 2480.00 µS
    180° = 2559.31 µS
    Je ne suis vraiment pas sûr que ma gestion soit faite dans les règles de l'art.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #include <Servo.h>
     
    const byte ServoPin = 10;
    const int LowerPos = 520 ; //Butée Mini du servo
    const int UpperPos = 2480 ; //Butée Maxi du servo
    const int Range = 173 ; //Plage de déplacement en degrés
    const float T180 = LowerPos + (((float)(UpperPos - LowerPos) / Range) * 180) ; //Extrapolation à 180° = 2559,306358381503
    const float UsRange = (T180 - LowerPos) / 180 ; // 1° = 11,32944444444444 µS
     
    Servo myservo;  // create servo object to control a servo
    void setup() {
      Serial.begin(115200);
      myservo.attach(ServoPin, LowerPos, T180);
      Serial.println("Bienvenue sur le moniteur série.");
     
      Serial.print("L'extrapolation à 180°, de ");
      Serial.print(Range);
      Serial.print("° entre la butée mini: ");
      Serial.print(LowerPos);
      Serial.print(" µS et la butée maxi: ");
      Serial.print(UpperPos);
      Serial.print(" µS est égale à: ");
      Serial.print (T180);
      Serial.println(" µS.");
     
      Serial.print("1° est égale à ");
      Serial.print(UsRange);
      Serial.println(" µS.");
      Serial.println();
     
    }
     
    void loop() {
      int PosDeg = Serial.parseInt(); // PosDeg = la position saisie dans le moniteur série de 0 à 173°
      float PosUs = LowerPos + (PosDeg * UsRange); // degré en µS
      if (Serial.available() > 0) {
        Serial.print(PosDeg);
        Serial.print("° = ");
        Serial.print(PosUs,2);
        Serial.println(" µS");
     
      }
        clearSerialBuffer();  
    }
     
    void clearSerialBuffer() {
      //clear serial buffer (but do nothing with it)
      while (Serial.available())
      {
        Serial.read();
      }
    }

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 119
    Points : 27 373
    Points
    27 373
    Billets dans le blog
    2
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre régulier
    Homme Profil pro
    Tech maintenance Info
    Inscrit en
    août 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Tech maintenance Info
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2009
    Messages : 209
    Points : 93
    Points
    93
    Par défaut
    Lire et vraiment tous comprendre ce n'est pas toujours évidant.
    Je ne viens pas du monde de la programmation et n'ai pas la prétention d'être programmeur. Je joue plus occasionnellement avec le langage.
    Je manque de rigueur et ne sais pas toujours employer les bons termes pour trouver les méthodes à utiliser.
    Alors me voilà avec mon indélicatesse, ma lourdeur, je ne percute pas toujours du premier coup! Et ai bien conscience que je devrais passer par une phase d'apprentissage et de recherche au préalable.
    Mais grâce à vous j'arrive à faire quelque petit truc sympa.

Discussions similaires

  1. [Python 3.X] conversion d'entiers vers un type BYTE
    Par floLD dans le forum Général Python
    Réponses: 5
    Dernier message: 25/08/2017, 12h01
  2. Réponses: 3
    Dernier message: 18/08/2014, 18h56
  3. Mise à jour d'une référence de type varchar vers type entier
    Par Mistraldor dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/07/2011, 10h53
  4. Passage du type integer vers varchar sur clé primaire
    Par GMI dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/01/2005, 10h09
  5. [LG]type entier
    Par fakroun dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2003, 00h39

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