Page 1 sur 1

Problème chiffre après la virgule.

Posté : 25 févr. 2020, 18:29
par JP54
Bonjour,
je suis en train de modifier mes graphiques avec les nouvelles librairie Highcharts et PHP7.
Je rencontre un problème avec certains chiffres à virgule.

Code : Tout sélectionner

$Normale_an= 785.8;
La variable ci-dessous s'affiche comme ça
colonne "année": 785,0
colonne "14": 8,0
Visible sur le deux dernières colonne à droite du graphique
https://www.meteo-jarny.com/DY-graphiq ... p?An=2020
J'ai le même problème avec le cumul de l'année.
Quelqu'un à déjà eu ce problème?

Mon code PHP

Code : Tout sélectionner

<?php
date_default_timezone_set('Europe/Paris');
setlocale(LC_ALL,"fr_FR.UTF-8");
		
            require("mysqli_connect.php");                     
            if (isset($_GET['annee']))
            $year = $_GET['annee'];
            if (isset($_GET['An'])) // appel par le menu
            $An = $_GET['An'];// appel par le menu
            $sql="select max(tstamp) from minimaxi";
            $query=mysqli_query($conn,$sql);                  
            $list=mysqli_fetch_array($query);	                     

            $start = mktime(23, 59, 59, 12, 31, $An-1);
            $stop = mktime(23, 59, 59, 12, 31, $An);
 
     $sql = "SELECT tstamp, SUM(Rain_jour), substr(recdateTZ,1,6) AS AnneeMois FROM `minimaxi`WHERE tstamp > '$start' AND tstamp <= '$stop' GROUP BY AnneeMois"; 
 
    $query = mysqli_query($conn,$sql);                   
    $i=0;
    while ($list = mysqli_fetch_assoc($query)) {     

    $Rain[$i]=$list['Rain_jour']*1;

       if (date("m",$Dtime[$i]/1000)==1) {$NormaleMensuelle[$i]=69.4;}
       elseif (date("m",$tDime[$i]/1000)==2) {$NormaleMensuelle[$i]=56.1;}
       elseif (date("m",$Dtime[$i]/1000)==3) {$NormaleMensuelle[$i]=65.1;}
       elseif (date("m",$Dtime[$i]/1000)==4) {$NormaleMensuelle[$i]=53.9;}
       elseif (date("m",$Dtime[$i]/1000)==5) {$NormaleMensuelle[$i]=63.3;}
       elseif (date("m",$Dtime[$i]/1000)==6) {$NormaleMensuelle[$i]=63.2;}
       elseif (date("m",$Dtime[$i]/1000)==7) {$NormaleMensuelle[$i]=70.7;}
       elseif (date("m",$Dtime[$i]/1000)==8) {$NormaleMensuelle[$i]=64.2;}
       elseif (date("m",$Dtime[$i]/1000)==9) {$NormaleMensuelle[$i]=66.9;}
       elseif (date("m",$Dtime[$i]/1000)==10) {$NormaleMensuelle[$i]=71;}
       elseif (date("m",$Dtime[$i]/1000)==11) {$NormaleMensuelle[$i]=67.2;}
       elseif (date("m",$Dtime[$i]/1000)==12) {$NormaleMensuelle[$i]=74.8;}

    $Ecart[$i]=$Rain[$i]-$NormaleMensuelle[$i];
    $i++;
    }   

    $Normale=array(69.4, 56.1, 65.1, 53.9, 63.3, 63.2, 70.7, 64.2, 66.9, 71, 67.2, 74.8,null,null);
    $Time=array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre","","Année");
    $Rain=array($Rain[0],$Rain[1],$Rain[2],$Rain[3],$Rain[4],$Rain[5],$Rain[6],$Rain[7],$Rain[8],$Rain[9],$Rain[10],$Rain[11],null,null);
    $Normale_an= 785.8;
    $Pluie_an = $Rain[0]+$Rain[1]+$Rain[2]+$Rain[3]+$Rain[4]+$Rain[5]+$Rain[6]+$Rain[7]+$Rain[8]+$Rain[9]+$Rain[10]+$Rain[11];
    $Ecart=array($Ecart[0],$Ecart[1],$Ecart[2],$Ecart[3],$Ecart[4],$Ecart[5],$Ecart[6],$Ecart[7],$Ecart[8],$Ecart[9],$Ecart[10],$Ecart[11],null);

    ?>
	
    <script language="JavaScript" type="text/javascript">
    eval(<?php echo  "'var dTime =  ".json_encode($Time)."'" ?>);
    eval(<?php echo  "'var dPluie =  ".json_encode($Rain)."'" ?>);
    eval(<?php echo  "'var dNormale =  ".json_encode($Normale)."'" ?>);
    eval(<?php echo  "'var dNormale_an =  ".json_encode($Normale_an)."'" ?>);
    eval(<?php echo  "'var dPluie_an =  ".json_encode($Pluie_an)."'" ?>);
    eval(<?php echo  "'var Ecart =  ".json_encode($Ecart)."'" ?>);	
    </script>


Re: Problème chiffre après la virgule.

Posté : 29 févr. 2020, 13:59
par JP54
Dominique et moi avons résolu une partie du problème en ajoutant des guillemets simple pour la normale.

Code : Tout sélectionner

 $Normale_an= '785.8';
https://www.meteo-jarny.com/DY-graphiq ... p?An=2012
Le problème reste entier pour le cumul annuel

Re: Problème chiffre après la virgule.

Posté : 29 févr. 2020, 19:27
par JP54
Problème résolu après pas mal d'heures de recherches et de modifications.
j'ai supprimé la ligne ci-dessous

Code : Tout sélectionner

$Pluie_an = $Rain[0]+$Rain[1]+$Rain[2]+$Rain[3]+$Rain[4]+$Rain[5]+$Rain[6]+$Rain[7]+$Rain[8]+$Rain[9]+$Rain[10]+$Rain[11];
Cette ligne calculait le cumul annuel, elle a été remplacé par une requête sur la table noaa_mois qui calcule le cumul annuel

Code : Tout sélectionner

    $qry='SELECT SUM(Pluie) as Pluie FROM noaa_mois  WHERE Tstamp > '.$start.' AND Tstamp <= '.$stop.''; 
                if ($result = mysqli_query($conn,$qry)) {
                while ($donnees = mysqli_fetch_object($result))
                        {
                        $cont=$donnees ;
                        $Pluie_an = $cont->Pluie;                                                                                                                                                                               
                        }
                        mysqli_free_result($result);
                        }

https://www.meteo-jarny.com/DY-graphiq ... p?An=2020

Pourquoi j'ai eu ce bug. A cause du PHP7 ou des nouvelles librarie Highcharts. Je ne sais pas.
Merci à Dominique, c'est lui qui a trouvé la solution. ;)

Re: Problème chiffre après la virgule.

Posté : 02 mars 2020, 19:30
par jturlier
Salut Pascal,
les tables NOAA sont faites pour simplifier la récupération des données, aussi bien celle de jour que celle de mois... alors pourquoi se compliquer la vie !
Tu as d'ailleurs, si tes $start et $stop sont des dates AMJ (ou des tstamps), la possibilité d'obtenir la même chose à partir de NOAAjour, la requête est absolument similaire et pourrait te permettre de travailler sur 365 jours flottants, ou sur 90 jours flottants... ou ce que tu veux.
Je préfère travailler avec les AMJ plutôt qu'avec les tstamps qui sont à mon avis moins faciles à interpréter.
Tu vas pouvoir cesser de cogiter toutes les nuits et te reposer :lol:
Amicalement
Jean

Re: Problème chiffre après la virgule.

Posté : 02 mars 2020, 19:35
par jturlier
JP54 a écrit :
25 févr. 2020, 18:29
Code : Tout sélectionner

$Normale_an= 785.8;

La variable ci-dessous s'affiche comme ça
colonne "année": 785,0
colonne "14": 8,0
On est en français, à mon avis $Normale_an= 785,8;
serait peut-être mieux.

Re: Problème chiffre après la virgule.

Posté : 03 mars 2020, 16:52
par JP54
Bonjour Jean,
Quand j'ai créé ce graphique, il n'y avait pas encore les tables noaa_jour et noaa_mois et même en utilisant ces tables j'aurais eu le même problème.
J'utilise comme beaucoup de personnes le tstamp depuis le début de la création de mes premiers graphiques, difficile de changer les habitudes.