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 :

Arrondir à 3 près sur une valeur!


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2006
    Messages : 123
    Par défaut Arrondir à 3 près sur une valeur!
    Bonjour à tous !
    Je suis debutant en C. je suis sous VC++, et je voudrais effectuer de simples calcul en arrondissant le resultat à 3 près après la virgule! j'ai bien essayé avec la fonction ceil(nbre) mais celui ci ne me donne que l'arrondir supérieur! et je ne veux pas . je voudrais du genre : resultat=5,333333 ==> resultat=5,33.
    Merci pour votre aide!!

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 461
    Par défaut
    Essaie floor() à la place.

    Sache aussi et surtout que si tu travailles avec des nombres à virgule flottante, donc des float ou des double, ils sont intrinsèquement imprécis. Si tu veux rester tout du long avec deux chiffres après la virgule, il vaut mieux travailler en virgule fixe. L'idée étant alors de travailler avec des entiers et de multiplier ou diviser par 100 qu'au dernier moment.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Obsidian :
    Essaie floor() à la place.
    floor donnera l'arrondi inférieur, pas le plus proche.

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,
    Citation Envoyé par diogene Voir le message
    floor donnera l'arrondi inférieur, pas le plus proche.
    Dans ce cas, on peut faire floor(value + 0.5)?

    A+

    Pfeuh

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    Salut,

    Dans ce cas, on peut faire floor(value + 0.5)?

    A+

    Pfeuh
    Oui

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Le problème de l'arrondi est déjà traité dans la FAQ : omment arrondir correctement un nombre, négatif ou positif ?

    Pour arrondir à n décimales, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    double arrondi_n(const double x, int n)
    {
        int N = DIX_PUISSANCE_N(n);
     
        return arrondi(N * x) / N;
    }
    Arrondir à n décimales après la virgule est différent de afficher un nombre avec n décimales après la virgule. Pour afficher le nombre, on peut certes utiliser %.*f mais %g fait déjà l'affaire.

  7. #7
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    Salut,

    Dans ce cas, on peut faire floor(value + 0.5)?

    A+

    Pfeuh
    Oui mais il ne souhaite pas d'arrondi, il veut uniquement tronquer la partie decimale.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 105
    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 105
    Billets dans le blog
    146
    Par défaut
    Une fonction tu type scanf ( enfin pas celle ci , mais j'arrive pu à retrouver le nom ) donc fonction qui permet de prendre une chaine , de lui indiquer un format ( pareil que pour les printf et scanf ) et qui retourne dans un pointeur la chaine resultante.

    Comme ça on peut faire un truc du genre :
    fonction_que_j'ai_pas_le_nom(&variable_formatter , "%f.3" , variable_à_formatter);

    Vous m'excuserai , pour ne pas avoir donner le nom de la fonction , ni le bon %f quelque chose pour limiter à trois chiffres derrière la virgule, mais j'espère que quelqu'un saura le nom ... pardon )

    Ah si , je crois qu'elle s'apelle sprintf ... enfin je crois
    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.

Discussions similaires

  1. [DEBUTANT] test sur une valeur
    Par eclipse012 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/02/2007, 09h52
  2. [Requête] S'approcher au plus près d'une valeur
    Par GIPPE dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 31/01/2007, 11h48
  3. [Serial] Commencer sur une valeur précise
    Par e1lauren dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 31/07/2006, 14h34
  4. Trier sur une valeur de champs et non sur le nom du champs
    Par kamalkam dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/05/2006, 17h41
  5. [XSL]appliquer la fonction substring sur une valeur récupéré
    Par totoranky dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 22/02/2006, 17h21

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