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

Langage PHP Discussion :

operations arithmetiques (simples) sur float


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Par défaut operations arithmetiques (simples) sur float
    Bonjour,
    J'ai un petit souci avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?
    $var1=9;
    $var2=9.001;
    echo $var2-$var1;
    ?>
    Moi, je trouve 0.001
    Ma calculatrice qui a 15 ans trouve 0.001

    PHP trouve 0.00099999999999945 !!!!!!!!!

    C'est vrai que c'est (tres tres tres) proche de 0.001, mais je preferai avoir la bonne valeur !
    J'ai le meme probleme si je caste prealablement mes variables en double ($var1=(double)$var1; ...)

    Avez-vous aussi ce genre de probleme ou est-ce specifique a certaines versions de PHP ou a l'OS ?

    Y-a-t-il une solution pour y remedier ?

    Merci pour vos suggestions,

    Sohnic

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Par défaut
    Il y a des fonctions pour arrondir .

    round() je crois et d'autres aussi, regarde dans le manuel.

    Qu'est ce que t'entend par caster tes variables en double, par curiositance ?

  3. #3
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Par défaut
    Bonjour,
    Tout d'abord, merci pour la reponse, mais je ne souhaite pas utiliser le round car j'ai besoin des valeurs exactes et ce qui m'embete le plus, c'est que php fait un calcul erroné.

    Un cast sert, en principe, a convertir des donnees d'un type vers l'autre (une chaine vers un entier, un nombre vers une chaine, ...). Ca s'utilise surtout avec les langage typés ou on declare les variables avec leur type avant de les utiliser. Dans ce cas, ca permet de changer le type d'une variable a la volee pour l'utiliser dans un cadre de figure specifique.

    Dans mon cas, ca m'a permis de dire explicitement a php qu'il s'agit d'un double et non d'une chaine de caracteres, ou autre chose.

    D'autres idees ?

    Merci,

    Sohnic

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

    Moi je pense que c'est plutôt spécifique au fondement même de l'informatique, et de la logique binaire : Les nombres à virgule en base décimale n'ont pas leur équivalent binaire.

    L'approximation est très proche évidemment, mais il y aura toujours un écart infime.

    Et ce genre de résultats !

  5. #5
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Par défaut
    Donc pas vraiment de solution...

    Il me faut donc calculer le nombre de decimales max que je peux obtenir, puis faire l'arrondi avec ce nombre. Comme ca j'ai bien le bon resultat... mais ca risque de rallonger serieusement le temps de calcul !

    Merci pour tes lumieres,

    Sohnic

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Par défaut
    salut sohnic.
    je suis en php 5.2.5 et je rencontre aussi des problemes de calcul. Comment as tu corrigé ton probleme ?

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/02/2013, 12h19
  2. Operation sur Float
    Par Hesiode dans le forum Langage
    Réponses: 8
    Dernier message: 18/09/2009, 15h32
  3. Question simple sur la libération des objets
    Par gibet_b dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2004, 10h01
  4. DTS : Question simple sur sources de données
    Par guignol dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/05/2004, 12h09
  5. Question simple sur les threads :)
    Par momox dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2003, 04h13

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