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 :

Etrange calcul de modulo


Sujet :

JavaScript

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Points : 149
    Points
    149
    Par défaut Etrange calcul de modulo
    J'ai un petit soucis avec ce code très simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(prompt("... modulo 1") % 1);
    En effet, lorsque je rentre la valeur 4.2 que ce soit avec Chrome ou IE, JS me renvoie 0.2000000000000018
    Pour 2.3 : 0.2999999999999998 etc...

    J'espère ne pas avoir bouleversé les lois de l'univers, si c'est le cas je m'en excuse...

    Plus sérieusement ce n'est pas un drame if suffit d'arrondir, mais comment cela se fait-il ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Pas de panique, les lois de l'univers vont bien

    C'est la gestion de la précision dess nombres qui est un peu troublante en JavaScript. Essaie :
    Si tu veux comprendre le pourquoi du comment : http://fr.wikipedia.org/wiki/Virgule_flottante

    ou en anglais : http://floating-point-gui.de/
    One Web to rule them all

  3. #3
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    pas qu'en javascript ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par mathspountz Voir le message
    J'ai un petit soucis avec ce code très simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(prompt("... modulo 1") % 1);
    En effet, lorsque je rentre la valeur 4.2 que ce soit avec Chrome ou IE, JS me renvoie 0.2000000000000018
    Pour 2.3 : 0.2999999999999998 etc...

    J'espère ne pas avoir bouleversé les lois de l'univers, si c'est le cas je m'en excuse...

    Plus sérieusement ce n'est pas un drame if suffit d'arrondir, mais comment cela se fait-il ?
    Citation Envoyé par definition
    En mathématiques, on désigne par modulo l’opération de calcul du reste de la division euclidienne.
    Citation Envoyé par definition
    En mathématiques, et plus précisément en arithmétique, la division euclidienne ou division entière est une opération qui à deux entiers naturels appelés dividende et diviseur, associe deux autres entiers appelés quotient et reste.
    le modulo est donc une opération sur des entiers donc définis sur l'ensemble Z
    et 4.2 n'est pas un entier.

    Javascript n'ayant pas de type entier mais seulement number s'offrait aux concepteurs du langage deux solutions
    1. ne pas implémenter l'opérateur
    2. accepter les nombre à virgule mais avec des résultats non conforme à la définition mathématique.


    A+JYT

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

Discussions similaires

  1. calcul de modulo
    Par Tree81 dans le forum Débuter
    Réponses: 6
    Dernier message: 31/05/2012, 15h37
  2. Réponses: 3
    Dernier message: 12/10/2010, 05h22
  3. calcul du modulo ou puissance d'un nombre
    Par tcheck_vi dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/06/2009, 07h54
  4. Calculer le modulo sans utiliser l'operateur %
    Par candidson dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 07/06/2007, 18h35
  5. [Access] calculer le modulo optimal ?
    Par kikidrome dans le forum Langage SQL
    Réponses: 6
    Dernier message: 09/10/2006, 10h44

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