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

C++ Discussion :

le type float


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Par défaut le type float
    bonsoir,
    je voudrais savoir comment faire pour ne prendre que quatre chiffres après la virgule.
    le type que j'utilise est float et des fois mes nombres réels provoquent une exception du type: débordement en virgule flottant, pour cela je voudrais limiter le nombre de chiffre après la virgule.
    merci de bien vouloir m'aider

  2. #2
    boli_971
    Invité(e)
    Par défaut
    Salut,

    J'ai réalisé un petit truc avec les flux, j'espère que sa t'aidera:
    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
    #include <iostream>
    #include <sstream>
    #include <iomanip>
     
     
    float reduce(const double nb, const int maxDec)
    {
        std::ostringstream os;
        //convertis le nombre en flux avec le nombre de virgules demandes
        //à partir de la on à un flux qui contient le nombre.
        os << std::setprecision(maxDec) << std::fixed << nb;
     
        //création d'un flux entrant sur la string du flux précédent
        std::istringstream is(os.str());
        float val = 0; //variable pour récupérer le chiffre
        is >> std::fixed >> val; //extraction à partir du flux entrant, récupération de la valeur en float
        return val; //retour de cette valeur.
    }
     
    int main()
    {
        float nb = 0.301029996f;
        std::cout <<  reduce(nb, 5) << std::endl;
     
        return 0;
    }
    Je serai étonné qu'il n'y ai pas une fonction en standard pour ce genre de choses, cherche dans la librairie standard du C (cmath peut être).
    Sinon si c'est une entrée utilisateur qui comporte trop de virgules, tu peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <iostream>
    #include <iomanip>
    int main()
    {
    float variable;
    std::cin >> std::setprecision(4) >> variable; //ne récupère que 4 chiffres apres la virgule.
    return 0;
    }
    Dernière modification par boli_971 ; 29/04/2009 à 01h38.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 094
    Billets dans le blog
    146
    Par défaut
    Bonjour,

    Quelque part dans ton code, tu as une fonction pour récupéré des float qui provoque le dépassement de mémoire ( cin >> value ) ou un truc du genre.
    Pourrait tu nous le montrer ?
    Pour un cin il faut faire :
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Par défaut
    bonsoir,
    je vous remercie pour vos réponse, ça m'a énormément aidé.
    voila ce qui me permet de générer ces float:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i=1;i<h;i+=1) {
             z[i]=4*(z[i-1]*(1-z[i-1]));
                            }
    je me demande ou je pourrai placé cette fonction "precision" ou "setprecision", merci encore
    [EDIT]
    z[0]=0,01

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Les solutions qui t'ont été présentées concernent la gestion de la valeur dans les flux. Or, il semblerait que tu aies un problème de calcul ? Tu peux soit catcher l'exception lorsque tu fais un débordement soit (ou plutôt ET) utiliser une bibliothèque qui représente les nombres flottants en virgules fixes.

Discussions similaires

  1. [type float ] problème d'affichage
    Par you98 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/11/2005, 08h06
  2. Précision du type float
    Par cj227854 dans le forum C
    Réponses: 5
    Dernier message: 02/11/2005, 20h54
  3. insérer une valeur de type float dans une abse de données
    Par Stephane_br dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/11/2005, 10h47
  4. Pb de formatage de champs de type float
    Par FrankyNormand dans le forum XMLRAD
    Réponses: 9
    Dernier message: 05/05/2005, 12h37
  5. [MS-SQL][ADO] précision du type FLOAT
    Par Le Lézard dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/09/2004, 15h30

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