problème fonction round()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème fonction round()

Re: problème fonction round()

par Ryle » 16 juin 2011, 17:22

A vérifier quand même, dans ton php.ini tu as une directive "precision" qui permet de spécifier le nombre de chiffres significatifs dans la gestion des nombres décimaux.. à priori celle-ci devrait être à 14 par défaut...

Re: problème fonction round()

par moogli » 16 juin 2011, 15:18

Bonjour,

Il y a des règles à appliquer pour les calculs scientifiques et pour maitriser les approximations. C'est tellement chiant que j'ai séché les cours et sous-traité les TP, mais j'ai retenu que c'était particulier.

Haaaannnn :mrgreen:

Re: problème fonction round()

par Mazarini » 16 juin 2011, 14:25

Bonjour,
J'ai besoin de précision pour mes calcules car se sont des données météo...
Il y a des règles à appliquer pour les calculs scientifiques et pour maitriser les approximations. C'est tellement chiant que j'ai séché les cours et sous-traité les TP, mais j'ai retenu que c'était particulier.

Re: problème fonction round()

par moogli » 16 juin 2011, 14:08

il faut voir ce que tu entend par précis, car tu demande un arrondis a 10-3 et l'erreur et 2 10-16 donc bon je suis pas certain que ça joue beaucoup sur le calcul étant donné que, par l'arrondis, tu introduit une erreur à 10-3 qui sera plus significative par la suite que celle à 10-16 ;)).

ceci dit j'ai testé
<?php
$x = round(5.04589,3);
var_dump($x);
?>
<?php echo round(5.04589,3); ?>
est le résultat est
float 5.046
5.046
avec une version 5.3.5 de php pour windows (faudrais que je test avec ma vm nux tiens).

après faut voir l'incidence de l'arrondis sur le résultat final du calcul ;) (dernier arrondis compris).

je pense qu'a final number format sera la solution, car la pour le coup tu ne maitrise pas la chose, a moins de faire ton propre "round" ;)

@+

Re: problème fonction round()

par orage33 » 16 juin 2011, 12:45

J'ai besoin de précision pour mes calcules car se sont des données météo.

Je continu à chercher de mon coté mais je commence à désespérer car je trouve rien :/

Re: problème fonction round()

par Mazarini » 16 juin 2011, 09:34

Bonjour,

As tu la possibilité de travailler avec des entiers ?
Ca résoudrait pas mal de problèmes que de faire les calculs avec des entiers et de gérer l'affichage et les entrées pour les virgules.

Re: problème fonction round()

par orage33 » 16 juin 2011, 01:47

Hmm ... Regarde le phpinfo(), la précise de nombre à virgules, etc.
A quoi correspond "la précise de nombre à virgules" dans phpinfo, car je ne sais pas du tout où regarder :/

Re: problème fonction round()

par devlop78 » 14 juin 2011, 23:24

Hmm ... Regarde le phpinfo(), la précise de nombre à virgules, etc.

Re: problème fonction round()

par orage33 » 14 juin 2011, 21:55

Je suis d'accord avec toi mais le problème ce que ce problème n'apparaissait pas avant et que sur le nouveau serveur il apparait donc il y a bien un truc de différent qui ne se passe pas comme avant mais maintenant il s'agit de cherché pourquoi j'ai ce problème sur cette config.

Cordialement :)

Re: problème fonction round()

par devlop78 » 14 juin 2011, 00:50

C'est marrant. Parce que autant le nombre ne me surprend pas étant donné la méthode de calcul binaire, mais en général quand tu fais un echo le résultat est normal.

En fait, le problème a déjà été soulevé, et il s'avère que l'ordinateur obtient bien 5.0460000000000002629 lorsqu'il fait ton calcul, tout simplement parce que ... enfin voilà. As-tu essayé avec les fonctions mathématiques adaptées ?

Je te conseille de lire
http://php.net/manual/fr/language.types.float.php
Les nombres décimaux ont une précision limitée. Même s'ils dépendent du système, PHP utilise le format de précision des décimaux IEEE 754, qui donnera une erreur maximale relative de l'ordre de 1.11e-16 (dûe aux arrondis)
Quand on regarde ton chiffre, on est sur du environ 10e-16 où commence l'erreur
Ceci peut mener à des résultats confus: par exemple, floor((0.1+0.7)*10) retournera normalement 7 au lieu de 8 attendu, car la représentation interne sera quelque chose comme 7.9999999999999991118....
Au final, moi j'avais, avant de lire ces articles, toujours pensé que les mathématiques étaient ce que faisait de mieux un ordinateur, mais non ^^ Le résultat s'explique mais c'est une histoire de stockage de chiffre avec une puissance, le tout en binaire, et comme le nombre de chiffre est limité, il y a une perte au niveau de la précision.

Mais sérieusement je rigole avec ça, mais tu devrais te tourner vers http://www.php.net/manual/fr/ref.bc.php

Re: problème fonction round()

par orage33 » 13 juin 2011, 10:59

Excuse moi, oui je fais un <?php echo round(5.04589,3); ?> et réponse j'ai 5.0460000000000002629 à l'écran

La version de mon php "5.3.5-1ubuntu7.2"

Re: problème fonction round()

par Ryle » 13 juin 2011, 00:29

Désolé de paraître insistant, mais comme tu ne réponds pas à ma question...

Dans ton script php tu fais bien un echo du round(), et c'est ce echo qui t'affiche ce nombre à l'écran ? Tu n'as pas de calcul, de récup de la valeur en base ou autre... En gros, si dans un script de test tu colles uniquement le code
<?php echo round(5.04589,3); ?>
ça t'affiche "5.0460000000000002629" à l'écran ?

C'est quoi la version de php sur ton dedié ?

Re: problème fonction round()

par orage33 » 12 juin 2011, 21:51

J'obtiens exactement cela
round(5.04589,3) //result 5.0460000000000002629
Et je l'obtiens ça à toute mes valeurs et ce depuis le transfert du site sur mon serveur dédié..

Re: problème fonction round()

par Ryle » 12 juin 2011, 20:21

Il faudrait déjà identifier le problème... A quel moment exactement est-ce que tu constates ce problème d'arrondi ?
Avec quelle valeur est-ce que ça ne fonctionne pas ?
Quelle valeur obtiens-tu juste après le round de cette valeur ?
Que fais tu de cette valeur après avoir fait le round et avant de l'afficher ou de l'utiliser ?
...

Re: problème fonction round()

par orage33 » 12 juin 2011, 19:54

En fait j'ai toujours le même problème même en changeant le type de champs.

Donc je pense vraiment que ça vient d'un problème lié à la configuration php5

Ideas ?