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

Shell et commandes GNU Discussion :

Partie entière d'un nombre décimal


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut Partie entière d'un nombre décimal
    Bonjour,

    Existe-t-il une fonction pour obtenir la partie entière d'un nombre décimal svp ?

    D'avance merci

  2. #2
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    J'ai trouvé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $balAmount | awk '{print int($1)}'
    Ca à l'air de marcher...

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x="1.111"
    echo "${x%%.*}"
    Sous Kubuntu 20.04

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_NUMERIC=C printf '%0.f\n' 1.111
    il semble ne pas en exister qu'une.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par hizoka Voir le message
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x="1.111"
    echo "${x%%.*}"
    Merci pour ta réponse, elle est plus simple que la mienne ;-)

  6. #6
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_NUMERIC=C printf '%0.f\n' 1.111
    il semble ne pas en exister qu'une.
    Merci N_Bah ;-)

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonsoir,

    attention, une manière fait un arrondi alors que l'autre se contente de prendre ce qui est à gauche du point et zappe le reste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ LC_NUMERIC=C printf '%0.f\n' 1.111
    1
    $ LC_NUMERIC=C printf '%0.f\n' 1.789
    2
    $ x="1.111"; echo "${x%%.*}"
    1
    $ x="1.789"; echo "${x%%.*}"
    1
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Bonsoir,
    Toujours dans la même veine.
    J'ai bidouillé ça pour obtenir l'arrondi de la division en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Monthly_cost=280
    Hourly_cost=0.46
    LC_NUMERIC=C printf '%0.f\n' $(echo "scale=2; $Monthly_cost / $Hourly_cost" | bc)
    Ce n'est pas très propre, peut-on faire mieux svp ?
    Mais surtout, comment récupérer le résultat dans une variable ?

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    comment récupérer le résultat dans une variable ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ printf --help | grep -- -v
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut,
    Citation Envoyé par BEEP-BEEP Voir le message
    Ce n'est pas très propre,
    À priori, tout fonctionne bien. C'est quoi qui te parait sale ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Voici une fonction pure built-in bash qui permet de diviser un entier par un flottant et retourne l'entier arrondi le plus proche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    divf ()
    {
        x1=${2#*.};
        y1=${2%.*};
        x2=$((10**${#x1}));
        x1=$(((y1*x2)+x1));
        x3=$(((($1*x2)%x1)*100));
        res=$((($1*x2)/x1));
        [ $((x3/x1)) -gt 50 ] && echo $((res+1)) || echo $res
    }
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ divf 280 0.46
    609
    $ divf 280 1.46
    192
    $ divf 280 46
    6
    Je laisse l'exercice pour considérer le premier argument aussi comme un flottant et/ou d'admettre des valeur tel que .45 en lieu et place de 0.45
    Cordialement.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Bonjour,
    Peut être plus propre juste avec bc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "scale=2; a=$Monthly_cost / $Hourly_cost ; scale=0 ; b=a / 1 ; scale=2 ; if (a-b >= 0.5) b=++b ; b" | bc
    Ou bien avec dc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dc -e '[1+]sa2k' -e "$Monthly_cost $Hourly_cost" -e '/dsb0k1/dlb-_0.5!<ap'
    Cordialement.

  13. #13
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Citation Envoyé par ctac_ Voir le message
    Bonjour,
    Peut être plus propre juste avec bc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "scale=2; a=$Monthly_cost / $Hourly_cost ; scale=0 ; b=a / 1 ; scale=2 ; if (a-b >= 0.5) b=++b ; b" | bc
    Yep, mais dans ce cas, on retire aussi le echo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bc <<<"scale=2; a=$Monthly_cost / $Hourly_cost ; scale=0 ; b=a / 1 ; scale=2 ; if (a-b >= 0.5) b=++b ; b"
    Cordialement.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (standard_in) 1: syntax error
    J'avais essayé plusieurs combinaisons pour supprimer le echo sans résultat.
    J'ai laissé tomber.
    Je préfère, et de loin, dc.

  15. #15
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 280
    Points : 12 729
    Points
    12 729
    Par défaut
    le <<< est spécifique bash, le plus standard est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bc <<_EOF_
    scale=2; a=$Monthly_cost / $Hourly_cost ; scale=0 ; b=a / 1 ; scale=2 ; if (a-b >= 0.5) b=++b ; b
    _EOF_
    Cordialement.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Bonjour,
    Les 2 propositions fonctionnent correctement ce matin ???
    Merci.

Discussions similaires

  1. Calcul de la partie entière d'un nombre
    Par Trap D dans le forum Mathématiques
    Réponses: 18
    Dernier message: 01/12/2010, 11h04
  2. récupérer la partie entière d'un nombre
    Par JauB dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 10/04/2008, 12h47
  3. Partie entière d'un nombre réel
    Par Lost in dans le forum MATLAB
    Réponses: 3
    Dernier message: 21/02/2008, 18h28
  4. Réponses: 4
    Dernier message: 06/09/2006, 11h45
  5. Fonction retournant la partie entière d'un nombre
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/11/2004, 15h58

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