Recoder des functions toutes faites

Résolu
Bonjour,

J'ai un exercice dans lequel je doit recoder des functions toute faites, la je suis sur la function intval().
J'aimerais écrire une condition dans mon if pour arrondir ma variable à l'entier le plus grand (sans utiliser de functions toute faites bien sur).

<?php

function fn_intval($var){
    if ($var == int){
        if($var + 0.5 > 1){

        }
    } else {
        return 1;
    }
}

$var = 12.589;

echo fn_intval($var);

?>


Pourriez-vous m'aider ?

Configuration: Windows / Chrome 100.0.4896.88

8 réponses

  1. Modérateur
    <?php
    
    function fn_intval($var){
      $intNum = "";
      $firstDecim = "";
      $array = (string)$var;
      if ($var != null){
        for ($i=0; $i < strlen($array); $i++) {
          if ($array[$i] == "." | $array[$i] == ","){
            $firstDecim = $array[$i+1];
            if($firstDecim >= 5){
              $intNum ++;
            }
            break;
          }else{
            $intNum .= $array[$i];
          }
        }
        
      } else {
          return 1;
      }
      return $intNum;
    }
    
    
    $a = 12.89;
    echo fn_intval($a) . "<br>";
    
    $a = 12.42;
    echo fn_intval($a) . "<br>";
    
    $a = 19.80;
    echo fn_intval($a) . "<br>";
    

    1
    1. merci, je te revaudrais sa ;) ... fin non je peux pas ... bha du coup juste merci tu est d'une aide précieuse !
      0
  2. j'en ait mis deux du coup

    $resu = "";
    if($array[$i+1] > "5" || $array[$i+1] > "5"){
                        $var .= 1;
                        $resu .= $array[$i-1];
                        if($array[$i] == "."){
                            break;
                        }
                        echo $resu;
                    } else if ($array[$i+1] < "5" || $array[$i+1] < "5"){
                        echo $var;
                    }
    


    en revanche je n'arrive toujours pas à mettre mes valeurs suppérieurs à $array[$i] == "." dans ma variable $resu
    0
    1. je vois donc sa marche mais ce n'est pas le résultat que je veux cars sa me donne le bon résultat pour ce que je veux faire mais ce n'est pas adapté...
      d'accord j'utilise les double alors donc : || / &&
      0
      1. j'arrive pas a supprimer les chiffres après la virgule ou alors d'afficher que les chiffres avant la virgule..
        0
        1. @jordane45excuse moi je suis parti me coucher hier, oui les OU / ET je connais d'ailleur je l'utilise et il marche pareil pour la concaténation et la sortie des boucles mais c'est vrai que pour la sortie des boucles j'utilise pas de break à la sortie des foreach
          0
        2. Modérateur
          @anthonyr_25
          les OU / ET je connais
          , pourtant .. dans ton code ..ils sont mal écrits...
          1
        3. @jordane45ha mince, le " ou = | " et le " et = & " c'est sa non ? parcequ'en tout cas il fonctionne en les écrivants comme sa
          je viens de voir le manual il en mette deux eux donc ou = || / et = && mais bon sa marche avec un seul mais d'accord du coup il faut en mettre deux
          0
        4. @jordane45voila ou j'en suis du coup :

          function fn_intval($var){
              $array = "$var";
              $resu = "";
              if ($var != null){
                  for ($i=0; $i < strlen($array); $i++) {
                      if ($array[$i] == "." || $array[$i] == ","){
                          if($array[$i+1] > "5" || $array[$i+1] > "5"){
                              $var += 1;
                              echo $var;
                          } else if ($array[$i+1] < "5" || $array[$i+1] < "5"){
                              echo $var;
                          }
                      }
                  }
                  
              } else {
                  return 1;
              }
          }
          
          $var = 12.89;
          
          echo fn_intval($var);
          


          donc sa marche bien sauf que sa m'affiche les chiffres après la virgule ^^
          la j'essaie de mettre un for dans le dernier if pour qu'il mette les valeurs jusqu'as la virgule dans une variable vide et ensuite d'afficher la variable mais je coince dans la condition du for ...
          0
      2. je tien quelque chose la :

        function fn_intval($var){
            $array = "\"".$var."\"";
            if ($var != null){
                for ($i=0; $i < strlen($array); $i++) {
                    if ($array[$i] == "." | $array[$i] == ","){
                        echo "yess";
                        if($array[$i+1] > "5" | $array[$i+1] > "5"){
                            echo "yes";
                            echo $var + 1;
                        }
                    }
                }
                
            } else {
                return 1;
            }
        }
        


        sa me sort : 13.89 ^^ donc c'est parfait j'ai juste à supprimer ce qu'il y as après le .
        0
        1. Même en utilisant des functions toutes faites je n'y arrive pas :crying:

          <?php
          
          /* include 'strlen.php'; */
          
          function fn_intval($var){
              if ($var != null){
                  $array[] = $var;
                  for ($i=0; $i < count($array); $i++) {
                      print_r($array);
                      echo $array[$i];
                      /* $array[] = $i; */
                      /* print_r($array); */
                  }
                  
              } else {
                  return 1;
              }
          }
          
          $var = 12.589;
          
          echo fn_intval($var);
          
          ?>
          

          sa me sort sa :
          Array
          (
              [0] => 12.589
          )
          12.589
          
          0
          1. Modérateur
            Regarde donc ce que contient la variable
            $var[0]

            À partir de là qu'est-ce que tu peux en conclure ?

            exemple :
            
            $var = "12.89";
            
            for ($i=0;$i < strlen($var);$i++){
            echo "-".$var[$i];
            }
            
            0
          2. @jordane45déjà j'ai pas eu l'idée de les mettres entre quottes, est ce que sa : $array = "\"".$var."\""; sa marche pour transformer une suite de nombres (exemple : $var = 12.89;) en une string ?
            0
          3. Modérateur
            @anthonyr_25Regarde l'exemple que je t'ai donné dans mon message précédent
            1
          4. @jordane45j'en conclus en tout cas qu'il y as 5 index qui comporte deux caractères chacun
            ou 10 index qui comporte un caractère chacun ...

            je tente quelque chose comme sa ducoup :
            function fn_intval($var){
                $array = "\"".$var."\"";
                if ($var != null){
                    for ($i=0; $i < strlen($var); $i++) {
                        echo $var[$i];
                        if ($var[$i] == "." | $var[$i] == ","){
                            echo "yess";
                            if($var[$i]+1 == "5" | $var[$i]+1 == "5"){
                                echo "yes";
                                echo $var + 1;
                            }
                        }
                    }
                    
                } else {
                    return 1;
                }
            }
            
            0
        2. Yo Jordane, je te remercie pour ta réponse je vais tenter ta première solution mais la deuxième malheureusement il me semble que substr ou split c'est compter comme des functions toute faites .. je sais même pas si j'ai le droit d'utiliser push()
          Je te redit ou j'en suis ;) dans quelques minutes
          0
          1. Modérateur
            Bonjour,


            sans utiliser de functions toute faites bien sur

            Tu peux stocker ton nombre dans un array
            Trouver le premier chiffre après le séparateur décimal ( via une boucle et un if/else )
            Vérifier si il est supérieur ou égal à 5 (
            Si oui, ajouter 1 au chiffre qui se situe avant le séparateur décimal.
            Retourner le nombre composé de tous les chiffres qui se trouvent avant le séparateur décimal.

            Sans passer par un array, en utilisant les fonctions de chaines de caractères, tu peux "spliter" ( explode ) la chaine au niveau du caractère séparateur, et utiliser du substr pour prendre les chiffres qui t'intéressent ( au lieu de faire des boucles et des if/else de ma solution précédente )
            1
            1. je pense ce qui me faudrait c'est genre un convertisseur
              0