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

JavaScript Discussion :

Erreur de soustraction de 2 nombres convertis avec ParseFloat


Sujet :

JavaScript

  1. #1
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    510
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 510
    Points : 127
    Points
    127
    Par défaut Erreur de soustraction de 2 nombres convertis avec ParseFloat
    Bonjour à toutes et tous

    j'ai le montant de trois chèques et je vérifie qu'ils soient égal au total demandé.

    je ne comprends pas le comportement de parsefloat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log("soustraction des chèques : "+(parseFloat('363.25 €')-parseFloat('121.08 €')));
    me donne comme résultat
    sous traction des chèques : 242.17000000000002
    alors que l'opération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log("soustraction des chèques X : "+((parseFloat('363.25 €'))-(parseFloat('121.08 €')+parseFloat('121.08 €')+parseFloat('121.09 €')+parseFloat('0 €'))));
    résultat
    sous traction des chèques X : 0

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1

  3. #3
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    510
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 510
    Points : 127
    Points
    127
    Par défaut
    Bonjour

    je m'excuse mais tu ne réponds pas à mon problème !
    ce n'est pas une question d'arrondi les chiffres sont écrits sans millionième supplémentaire

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Il s'agit bien d'un souci de float ...

  5. #5
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    510
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 510
    Points : 127
    Points
    127
    Par défaut
    je m'excuse mais je ne comprends pas ce que tu veux dire ?

    si j'ai bien compris parsefloat('363.25 €') donne bien comme résultat 363.25
    et parseFloat('121.08 €') donne bien 121.08
    donc 363.25-121.08 ça devrait faire 242.17 et pas 242.1700000000002

    et quand j'additionne tous les chèques j'obtiens 363.25 que je soustrait à363.25 et j'obtiens 0

    c'est peut être un histoire de "float" mais je ne comprends pas !!!

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Il n'y a pas que Javascript qui ait ce comportement avec les float
    https://www.developpez.net/forums/d1...t/somme-float/

  7. #7
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    510
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 510
    Points : 127
    Points
    127
    Par défaut
    je crois que je viens de comprendre:
    le fait de convertir ici une chaine en nombre avec ParseFloat donne une représentation approximative du nombre réel.
    donc il faudrait toujours faire un arrondi derrière pour être sûr de ne pas traîner des millionièmes.

    C'est bizarre qu'il n'y ait une fonction qui fasse l'ensemble des 2 opérations.

    merci pour ces éclaircissement je mets résolu à moins que je n'ai pas compris

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

Discussions similaires

  1. Erreur sur l'ouverture d'un formulaire avec condition
    Par Virgile59 dans le forum Access
    Réponses: 4
    Dernier message: 08/11/2005, 14h16
  2. [langage] Erreur d'arrondi sur petits nombres
    Par Tchetch dans le forum Langage
    Réponses: 7
    Dernier message: 12/01/2005, 10h11
  3. soustraction de 2 nombres
    Par coucoucmoi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/03/2004, 14h55
  4. Erreur de soustraction
    Par e120650 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/02/2004, 17h10
  5. Réponses: 1
    Dernier message: 23/10/2002, 13h40

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