Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème au niveau du modulo ??

Sujet résolu
    20 septembre 2017 à 22:26:04

    Bonsoir,

    J'aimerais convertir la variable seconde ; 12345678912 en année et en mois.

    J'arrive bien à 391 pour l'année ; mais par contre j'ai un problème au niveau du mois la réponse doit être 5 et moi j'obtiens 4762.

    Je ne parviens pas à comprendre d'où provient mon erreur ? Est-ce le calcul du modulo ?

    Merci pour une éventuelle réponse de votre part.

    <?php
    
    /*
    
    Écrivez un programme qui convertit un nombre entier de secondes fourni au départ en un
    nombre d’années, de mois, de jours, de minutes et de secondes
    (utilisez l’opérateur modulo : %).
    Le nombre de secondes est fourni au départ :
    
    */
    
    
    $nsd = 12345678912;   // => nombre de seconde: 
    
    $nspj = 3600 * 24;    // => nombre de seconde par jour * le nombre d'heure dans une journée
    
    $nspa = $nspj * 365;  // => nombre de seconde par année 
    
    $nspm = $nspj * 30;   // => nombre de seconde par mois ; il y a 30 jours dans un mois
    
    /*
    
    Nombre d'années contenues dans la durée fournie
    
    */
    
    $na = (int) ($nsd / $nspa); // => division entière 
    $nsr = $nsd % $nspa;        // => division modulo ; des secondes restants
    
    
    //Nombre de mois contenues dans la durée fournie
    
    $nm = (int) ($nsd / $nspm);
    $nsr = $nsd % $nspm; 
    
    
    
    echo "Le nombre de seconde à convertir => ".$nsd ; 
    echo "<br />";
    echo "Cette durée correspond à " .$na. " années de 365 jours."; 
    echo "<br />";
    echo "Cette durée correspond à " .$nm. " mois de 30 jours. ";
    echo "<br />";
    echo "second restant " .$nsr. " ."; 
    
    
    ?>



    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2017 à 23:07:39

      Bonjour,

      tu n'as pas compris le problème.

      Tu dois retirer à chaque fois le nombre de secondes correspondant :  pour commencer retire le nombre de secondes correspondant à 391 années, pour calculer le reste en mois.

      Cela reste très théorique de toute façon, le nombre de jour n'est pas fixe dans un mois.

      • Partager sur Facebook
      • Partager sur Twitter
        21 septembre 2017 à 1:05:59

        Bonsoir Philodick,

        Ok est d'accord pour la première ligne ?

        $na = (int) ($nsd / $nspa); // => division entière
        $nsr = $nsd % $nspa;        // => division modulo ; des secondes restants

        Je pense que c'est au niveau du $nsr que ça bloque ?

        Mes variables ne sont pas correctes ? Ne faut-il pas prendre le nombre de secondes définit ($nsd) modulo le nombre de secondes par années pour obtenir le nombre de secondes restants ?

        • Partager sur Facebook
        • Partager sur Twitter
          21 septembre 2017 à 10:22:03

          Ton calcul est bon au début.

          Par contre tu dois partir de $nsr pour calculer le nombre de mois :

          $na = (int) ($nsd / $nspa); // => division entière
          $nsr = $nsd % $nspa;        // => division modulo ; des secondes restants
           
           
          //Nombre de mois contenues dans la durée fournie RESTANTE
           
          $nm = (int) ($nsr / $nspm);
          $nsr = $nsr % $nspm;
           

          Et même chose pour les jours, etc

          • Partager sur Facebook
          • Partager sur Twitter
            21 septembre 2017 à 13:50:47

            Le problème c'est que si je part de $nsr (nombre de seconds restants) le résultat obtenu est -1 ce qui n'est pas possible... :-(
            • Partager sur Facebook
            • Partager sur Twitter
              23 septembre 2017 à 9:09:41

              philodick a écrit:

              Petite question préalable, tu es en 32 bits ?


              Oui pourquoi ?
              • Partager sur Facebook
              • Partager sur Twitter
                24 septembre 2017 à 16:47:22

                Parce qu'à mon avis, php ne gèrera pas un si gros nombre en 32 bits. Essaye avec un nombre plus petit.

                http://php.net/manual/fr/language.types.integer.php

                • Partager sur Facebook
                • Partager sur Twitter
                  30 septembre 2017 à 11:03:38

                  Bonjour philodick,

                  Merci je ne savais pas, c'était donc ça le hic. Je vais travailler sur des nombres plus petits. :-°

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Problème au niveau du modulo ??

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown