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 :

Arrondi dynamique ?


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Points : 108
    Points
    108
    Par défaut Arrondi dynamique ?
    Bonjour

    Je recupere un poids : $P
    ce $P doit être arrondi à la dizaine supérieure :

    53 => 60
    164 => 170
    281 => 290
    1512 => 1520

    J'ai fait ceci , mais cela me parait un peu tordu, bien que cela marche..Y a t il un autre moyen ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $P = '10272'; 
    if(substr($P,-1) != '0' ) {$P_new =((substr($P,-6,-2)).(substr($P,-2,-1)+1).(0))  ; }
    echo $P_new  ;
    ?>
    merci par avance

    Nimbus
    <reve>Quand je serais grand je f'rais TOUT avec une seule ligne de commande</reve>

  2. #2
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Points : 532
    Points
    532
    Par défaut
    Tu divises par 10 tu fais un ceil() et tu multiplies par 10 non ?

  3. #3
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    J'ai bien ça :

  4. #4
    Membre régulier Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Points : 108
    Points
    108
    Par défaut merci à vous deux
    j'aurai appris 2 choses de plus au jourd'ui :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
    $P = '10272'; 
    if(substr($P,-1) != '0' ) {$new =((substr($P,-10,-2)).(substr($P,-2,-1)+1).(0))  ; }
    echo $new  .'<br>' ;
     
    $new_2 =((int)($P / 10) * 10)+10;
     
    echo $new_2  .'<br>' ;
     
    $new_3 =( ceil($P / 10))*10 ;
     
    echo $new_3   ;
     
    ?>
    3 Manières d'obtenir le même résultat, l'embarras du choix !

    nimbus
    <reve>Quand je serais grand je f'rais TOUT avec une seule ligne de commande</reve>

  5. #5
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Tu peux aussi ajouter systématiquement la différence entre 10 et le dernier chiffre. Il faut laisser parler son imagination.

  6. #6
    Membre régulier Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Points : 108
    Points
    108
    Par défaut bon ...
    j'ai testé les 4 possibilités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?php
    $P = '214';
    if(substr($P,-1) != '0' ) {$new =((substr($P,-10,-2)).(substr($P,-2,-1)+1).(0))  ; }
    echo $new*1.24  .'<br>' ;
     
    $new_2 =((int)($P / 10) * 10)+10;
    echo $new_2*1.24 .'<br>' ;
     
    $new_3 =( ceil($P / 10))*10 ;
    echo $new_3*1.24 . '<br>'  ;
     
    if(substr($P,-1) != '0' ) {$new_4 = $P +  (10-(substr($P,-1) )) } ;
     
    echo $new_4*1.24   ;
    ?>
    les réponses dans un test. php sont :
    272.8
    272.8
    272.8
    272.8
    parfait.

    Sauf que lorsque je les applique dans mon code j'ai des résultats aléatoires :
    sub et int donnent : 265,57
    ceil donne : 273,02
    diff donne : 273,02

    ?

    $P est une extraction SAP dans excel, convertie en entier et uploader dans mysql, ( champs varchar(..) )

    J'ai lu que ceil() possédait des virgules flottantes,
    est ce l'origine de ses dissonnances ?
    mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    /* extraction des donnees tarifaire */
    con_trps();
    $trps = $_SESSION['trps'];
    $base_tarif = ('dls_trps_' . $trps) ;
            $ext = "SELECT * FROM $base_tarif where dpt='$dpt'" ;
            $res_ext = mysql_query($ext) or die ("ext tranche failed");
            while ($row_2 = mysql_fetch_object ($res_ext))
                    {
    if($P <= ($row_2->p11))     {$tarif = $row_2->t1;  $tr=11;}
    elseif($P <= ($row_2->p12)) {$tarif = $row_2->t2;  $tr=12;}
    elseif($P <= ($row_2->p13)) {$tarif = $row_2->t3;  $tr=13;}
    elseif($P <= ($row_2->p14)) {$tarif = $row_2->t4;  $tr=14;}
    elseif($P <= ($row_2->p15)) {$tarif = $row_2->t5;  $tr=15;}
    elseif($P <= ($row_2->p16)) {$tarif = $row_2->t6;  $tr=16;}
    elseif($P <= ($row_2->p17)) {$tarif = $row_2->t7;  $tr=17;}
    elseif($P <= ($row_2->p18)) {$tarif = $row_2->t8;  $tr=18;}
    elseif($P <= ($row_2->p19)) {$tarif = $row_2->t9;  $tr=19;}
    elseif($P <= ($row_2->p20)) {$tarif = $row_2->t10; $tr=20;}
    elseif($P <= ($row_2->p21)) {$tarif = $row_2->t11; $tr=21;}
    elseif($P <= ($row_2->p22)) {$tarif = $row_2->t12; $tr=22;}
    elseif($P <= ($row_2->p23)) {$tarif = $row_2->t13; $tr=23;}
    elseif($P <= ($row_2->p24)) {$tarif = $row_2->t14; $tr=24;}
    elseif($P >  ($row_2->p25)) {$tarif = $row_2->t15; $tr=25;}
                    }
    echo "<td bgcolor='white'><p class='v1'>". number_format($tarif , 2, ',', ' ') . "</p></td>";
    if($tr > '20'){
     
    if(substr($P,-1) != '0' ) {$P = = $P +  (10-(substr($P,-1) )) ;}
     
    //if(substr($P,-1) != '0' ) {$new =((substr($P,-10,-2)).(substr($P,-2,-1)+1).(0))  ; }
    //                                      }
    //if($tr > '20') {$P  =(ceil($P/10))*10;}
    //if($tr > '20') {  ( ( (int)($P / 10) ) * 10 ) +10 ;}
                    }
    else {}
    if($tr < '20') {$cout_jour = $tarif ;}
    else{$cout_jour = ( $P * $tarif ) ; }
            echo "<td align='right' bgcolor='mistyrose'><p class='v2'><b>". number_format($cout_jour , 2, ',', ' ') . "</p></td>";
     
                    echo "</tr>";
    nimbus_circonspect : les ordinateurs sont réputés intelligents, donc je ne le suis pas ?
    <reve>Quand je serais grand je f'rais TOUT avec une seule ligne de commande</reve>

  7. #7
    Membre régulier Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Points : 108
    Points
    108
    Par défaut Mea Culpa
    Bon c'est de mon fait ...

    les tarifs applicables au dela de $t10 sont des prix aux 100 kg,
    par simplification ( ou fainéantise ) j'ai enregistré dans la base
    un prix au kilo, au lieu du prix a 100 kg et
    compte tenu de 'number_format' calé à 2, la 3 éme décimale est tronquée.

    à bientôt

    nimbus
    <reve>Quand je serais grand je f'rais TOUT avec une seule ligne de commande</reve>

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

Discussions similaires

  1. [XL-2007] Arrondi supérieur Tableau croisé dynamique
    Par vivi4561 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/03/2011, 11h01
  2. [AC-2003] nombre arrondi dans un tableau croisé dynamique
    Par aymeric 59000 dans le forum Access
    Réponses: 0
    Dernier message: 10/11/2009, 11h44
  3. Arrondi dans tableau croisé dynamique
    Par pHl37100 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 05/11/2007, 18h26
  4. Agrandir dynamiquement un arrondi sans le déformer
    Par fantomette99 dans le forum Flash
    Réponses: 1
    Dernier message: 18/10/2007, 23h01
  5. repertoire temp dynamique
    Par killpilot dans le forum C
    Réponses: 2
    Dernier message: 26/04/2002, 17h19

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