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 :

Transformation valeur avec des puissances (e+09) en entier


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2017
    Messages : 53
    Points : 32
    Points
    32
    Par défaut Transformation valeur avec des puissances (e+09) en entier
    Bonjour,

    Alors, voilà je me suis fais un petit script pour récupérer des informations en fonction d'un id, j'ai donc deux colonnes (une colonne id et une colonne valeur associé) comme ci-dessous.

    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
     
    518000 5543289
    071600 207375961
    098900 1109631833
    076900 761391055
    075400 3.46109e+09
    080500 2.56229e+09
    054000 450730515
    516400 214399340
    014700 1000709878
    070600 58761818
    075900 697576450
    051800 477073464
    639107 260930343
    513700 2.27696e+09
    Le problème c'est que j'ai des valeurs en puissance (je suppose) e+09 et j'aimerais juste que ça devienne des entiers à la place. J'ai chercher un peu partout mais je n'ai pas réussi à trouver quelque chose concernant la transformation de cette valeur en entier.

    Si tu pouviez m'aider à trouver la commande bash qui me permettrait de le faire, je vous serais reconnaissant.

    Merci d'avance et bonne journée

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 273
    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 273
    Points : 12 708
    Points
    12 708
    Par défaut
    Bonjour,

    Tu peux le faire par exemple comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ LC_NUMERIC=C printf "%.0f\n" 3.46109e+09
    3461090000
    Le LC_NUMERIC=C sert ici à considérer le "." comme une "," dans la notation.
    Pour mettre le résultat dans une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ LC_NUMERIC=C printf -vfoo "%.0f" 3.46109e+09
    $ echo $foo
    3461090000
    Cordialement.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2017
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Parfait, merci beaucoup !

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Xam29870 Voir le message
    Bonjour,

    Alors, voilà je me suis fais un petit script pour récupérer des informations en fonction d'un id, j'ai donc deux colonnes (une colonne id et une colonne valeur associé) comme ci-dessous.

    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
     
    518000 5543289
    071600 207375961
    098900 1109631833
    076900 761391055
    075400 3.46109e+09
    080500 2.56229e+09
    054000 450730515
    516400 214399340
    014700 1000709878
    070600 58761818
    075900 697576450
    051800 477073464
    639107 260930343
    513700 2.27696e+09
    Le problème c'est que j'ai des valeurs en puissance (je suppose) e+09 et j'aimerais juste que ça devienne des entiers à la place. J'ai chercher un peu partout mais je n'ai pas réussi à trouver quelque chose concernant la transformation de cette valeur en entier.
    Disedorgue a correctement répondu à la question que tu as posée...

    J'aimerais te poser une question à mon tour:
    pourquoi as-tu des "entiers" en notation flottante dans les valeurs associées dans ton fichier?
    C'est-à-dire qui a généré ce fichier et comment?

    Àmha, il serait plus "correct" de voir si le générateur de ce fichier ne pourrait pas afficher la valeur en notation entière, plutôt que de l'afficher en flottant pour s'amuser à la reconvertir en entier par la suite (comme demandé et proposé).

    On peut notamment remarquer que la conversion en entier de "3.46109e+09" va probablement donner quelque chose de proche de "3461090000", qui n'est probablement pas la valeur exacte (à l'unité près) de ce que tu appelles la valeur associée et qui était stockée quelque part avant d'être affichée de manière tronquée comme, par exemple, "3461091234".

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour

    Même la colonne de gauche interpelle.
    Les nombres qui commencent par 0 me font faire des cauchemars.
    Car ils sont interprétés comme de l'octal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ toto=051000
    $ echo $toto
    051000
    $ declare -i tata
    $ tata=051000
    $ echo $tata
    20992
    $ echo $((toto+1))
    20993
    Vous avez noté le clou du spectacle ?
    La variable "toto", dont on croit qu'elle contient la bonne valeur, et qui part en vrille à la première interprétation en entier.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 273
    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 273
    Points : 12 708
    Points
    12 708
    Par défaut
    Oui, à priori c'est pour de l'alignement car on voit qu'effectivement, ce n'est pas de l'octal...

    Donc corriger à la source, ou on peut dans ce cas précis (puisque c'est de l'alignement), faire par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ read i <<<"051000"
    $ tata=$((1$i%1000000))
    $ echo $((tata+1))
    51001
    Mais bon, je suis plus de l'avis de jack-ft...
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ i=051000
    $ echo $((10#$i)) #on passe $i en base 10
    51000
    non ?

    et, par curiosité, je veux bien un petit cours de maths à propos de $((1$i%1000000)).
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Pb de transformation 3D avec des matrices
    Par shkyo dans le forum C#
    Réponses: 3
    Dernier message: 23/06/2016, 15h09
  2. [ODBC] ajout d'une valeur avec des apostrophes
    Par bullrot dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/08/2010, 17h57
  3. [E-03] Récuperer valeurs avec des textbox dynamiques
    Par UltrAzimut dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/11/2008, 11h27
  4. Réponses: 11
    Dernier message: 01/04/2008, 18h13
  5. [XSLT/XPATH] récupération de valeur avec des espaces
    Par peyo_le_fou dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 30/07/2007, 09h01

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