Votre navigateur est obsolète. Téléchargez un navigateur moderne, par exemple FireFox.
Léa-Linux : Forum
Le forum de Léa abrite des discussions autour des Logiciels libres.
Syndication
  • RSS ForumForum complet
  • RSS Forum - DéveloppementForum - Développement
  • RSS Forum - Développement - 337202Cette discussion

Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Important : quand vous posez une question, n'oubliez pas de nous donner les indications suffisantes pour que nous puissions répondre. En effet, la divination n'est pas le fort du Linuxien averti. Pour une meilleure compréhension, le bon usage de la grammaire et de l'orthographe est fortement encouragé. En particulier, le langage SMS est à éviter absolument. En cas d'abus, il pourra être censuré sans autre forme de procès.
Les messages dont le contenu est illégal (incitant à la haine - raciale ou autre, diffamant), ou dont le contenu est sans rapport avec le sujet du forum, ou qui sont parfaitement stupides ou hors sujet seront supprimés sans pitié. Il pourra même être fait appel au fournisseur d'accès du coupable pour faire cesser ses agissements.
» Index du forum » Développement » bc : afficher le zéro d'un "résultat décimal"
Aller à la discussion: PrécédentSuivante
Action: Nouveau sujetChercherS'authentifier
bc : afficher le zéro d'un "résultat décimal"
Avatar
Auteur: Иван (IP enregistrée)
Date: le 22 mai 2008 à 14:04

Bonjour à tous

Je voudrais savoir si 'bc' peut afficher le zéro dans le résultat de 1/2.

Pour l'instant, pour afficher le zéro, je passe par sed :
echo "scale=2; 1/2" | bc | sed 's/^\./\0./'


'bc' ne peut-il le faire directement?

Re: bc : afficher le zéro d'un "résultat décimal"
Auteur: tellmewhy (IP enregistrée)
Date: le 22 mai 2008 à 20:58

Bonsoir NBaH, image : content

En attendant mieux, et pour te faire patienter :

:~$ awk 'BEGIN{ print 1/2 }'
0,5

:~$ awk 'BEGIN{ print 4/3 }'
1,33333


Désolé pour les caractères de ton nom, le copier coller ne marche pas. image : fache

Une mine d'or (le trésor de cep) : http://www.cepcasa.info/divers/

Re: bc : afficher le zéro d'un "résultat décimal"
Avatar
Auteur: Иван (IP enregistrée)
Date: le 23 mai 2008 à 05:51

Merci tellmewhy,

Awk semble en effet une piste à suivre. J'en suis arrivé là :

echo 1 > ~/val # eh oui, sinon c'est pas vraiment drôle *
awk '{ print $1/3 }' ~/val | awk 'BEGIN { FS="." } { print $1"," substr($2,0,2) }'


Je m'explique :

Awk récupère la valeur contenue dans le fichier ~/val, à savoir "1", qu'il divise par 3. Ce qui donne 0.333....

Or, je souhaite n'obtenir un nombre qu'à deux décimales. En utilisant la variable FS (Field Separator) à laquelle j'assigne le point, Awk scinde donc la valeur obtenue en deux champs.

Il affiche le premier champs tel quel; par contre je lui fait traiter le deuxième champs par la fonction substr(champs,position,longueur) :
champs : bah, c'est le champs !
position : c'est la position à partir de laquelle awk affiche le champs (0, ou 1 [?] pour afficher dès le début),
longueur : c'est le nombre de caractères affichés à partir de la position.


Et donc, j'obtiens bien 0,33 (tout ça pour si peu ^^ )

"L'ai-je bien descendu ?" pas si sûr...

Je n'ai plus qu'un tube au lieu de deux, mais ça me parait bizarre de tuber une même commande... surtout Awk...
image : question

J'ai pris le [ Grymoire ] pour guide. Existe-t-il quelque chose de plus complet, plus clair, et en français ?

(*)le fait que le "1" soit une "variable" contenue dans un fichier ne m'était pas apparu important de la façon dont je le traitait, mais ça le devient avec Awk...

Re: bc : afficher le zéro d'un "résultat décimal"
Auteur: Basile STARYNKEVITCH (IP enregistrée)
Date: le 23 mai 2008 à 07:02

Puisque
printf "%.3f\n" 0.3333367
produit 0.33 on pourrait remplacer la deuxième occurrence d'awk.

Sinon, pour le problème initial, mon réflexe est de passer à un autre langage de script (Ruby, Python, Ocaml, ..).

----

Basile STARYNKEVITCH où on trouve mon mél

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

N.B. N'hesitez pas à consulter aussi mes contributions antérieures.

Re: bc : afficher le zéro d'un "résultat décimal"
Auteur: tellmewhy (IP enregistrée)
Date: le 23 mai 2008 à 07:50

Bonjour NBaH, image : content


Dans les manuels de Gnu, tu trouveras
celui-ci sur Gawk.

Par contre en français, d'une taille conséquente, et pour une version récente, cela semble plus compliqué.
Tu as certainement déjà fait une recherche Google, j'y ai vu quelques
traductions en français, mais pas celle de l'ouvrage que tu as cité, ni de celui que j'ai indiqué.

Je n'ai fait qu'une recherche rapide, j'ai inévitablement loupé de très bons articles.
Mais sur des sujets précis, il y a un grand nombre de sujets très intéresants.

Beau travail, je n'avais pas envisagé qu'il te fallait un nombre précis après la virgule.

Pour ta variable, tu peux également importer une variable externe comme ceci, mais je suppose
que tu connaissais déjà :

a=1
:~$ awk -v truc=$a 'BEGIN{ print truc/3 }'
0,333333


Une piste à suivre sûrement, les possibilités de printf et %f:

Le chapitre : 4.5.2 Format-Control Letters

Un exemple, je n'ai pas approfondi le sujet :

:~$ awk 'BEGIN{a=1;b=4;c=a/b; printf "%1.3f\n",c}'
0,250

:~$ awk 'BEGIN{a=1;b=4;c=a/b; printf "%1.2f\n",c}'
0,25


C'est donc sûrement une piste à suivre.




Re: bc : afficher le zéro d'un "résultat décimal"
Auteur: tellmewhy (IP enregistrée)
Date: le 23 mai 2008 à 07:54

Bonjour Basile STARYNKEVITCH, image : content

Excuses-moi, je n'avais pas vu ton post. Ça faisait trois quart d'heures que j'étais
en train de triturer ma réponse. Honte à moi, je mets mon bonnet d'âne.image : fache

Résolu: afficher le zéro d'un "résultat décimal"
Avatar
Auteur: Иван (IP enregistrée)
Date: le 23 mai 2008 à 15:26

echo 1 > ~/val # juste pour dire qu'il y a un nombre dans un fichier
a=$(cat ~/val)
awk -v b=$a 'BEGIN { nb=b/3; printf "\t%10.2f bla de blabla\n", nb }'

Ce qui m'affiche :
tab 0.33 bla de blabla

je ne sais pas comment faire apparaître une tabulation en bbcode (si c'est possible...)
%10.2f affiche correctement deux décimales avec un alignement à droite.

Je te remercie tellmewhy. Awk's aw(k)esome !

Re: bc : afficher le zéro d'un "résultat décimal"
Auteur: tellmewhy (IP enregistrée)
Date: le 23 mai 2008 à 16:11

Bonjour NBaH, image : content

Deux liens sur le Bbcode :
Un
Deux

Le comportement du Bbcode, les balises utilisables ou non, varie d'un forum à l'autre, tu peux faire tes essais en utilisant Pré visualiser, dans le coin du bas à droite, mais tu l'avais déjà remarqué.

Je n'en sais pas plus concernant cela. image : fache

En tout cas, ravi que tu aies trouvé une solution, et bravo ! image: clin d`oeil




Re: bc : afficher le zéro d'un "résultat décimal"
Auteur: Blini (IP enregistrée)
Date: le 24 mai 2008 à 17:57

Salut,

Avec bc, ceci semble marcher :

echo "scale=2 ; x = 1/2; if (x < 1) \"0\"; x" | usr/bin/bc

Re: bc : afficher le zéro d'un "résultat décimal"
Avatar
Auteur: Иван (IP enregistrée)
Date: le 24 mai 2008 à 18:53

Nous avons un gagnant ! image : applaudissement image : applaudissement image : applaudissement

Re: bc : afficher le zéro d'un "résultat décimal"
Auteur: Blini (IP enregistrée)
Date: le 25 mai 2008 à 10:32

Salut,

Hélas c'est une victoire avec réserves, car ça ne marchera que si tu utilises exclusivement des nombres naturels (>0). Je me suis en plus aperçu que pour les nombres négatifs, bc renvoie une chose ignoble genre "-.3" au lieu de "-0.3". image : cry

Bref, si tu veux quelque chose d'un peu plus robuste (mais là ça dépend de tes besoins) awk sera sûrement une meilleure piste... ou Perl en "one-line" :

perl -e 'open FILE, $ARGV[0]; $n = <FILE>; close FILE; print $n / 3 . "\n"' ~/val


Voilà, Voilà (et désolé pour l'éventuelle fausse joie)... image : langue

Re: bc : afficher le zéro d'un "résultat décimal"
Auteur: Blini (IP enregistrée)
Date: le 25 mai 2008 à 10:48

P-S. après vérification "nombres naturels" ne recouvre visiblement que les entiers positifs... m'apprendra à faire le malin avec le jargon matheux. image : flue

Re: bc : afficher le zéro d'un "résultat décimal" (le retour)
Avatar
Auteur: Иван (IP enregistrée)
Date: le 25 mai 2008 à 12:05

Bonjour Blini

Non, non, point de fausse joie... ce morceau de code est destiné à ne recevoir que des nombres positifs.

J'ai testé avec
bc
scale=2
x=-1/3
if (x < 0) "-0"; if (x > 0) "0"; x

résultat : -0-.33 (guère apétissant...)

Il faudrait ne faire ressortir que la valeur absolue de x.
Je suis peut-ête allé trop vite en le parcourant, mais je n'ai pas trouvé dans le man de bc cette possibilité...
image : question

Re: bc : afficher le zéro d'un "résultat décimal"
Auteur: Blini (IP enregistrée)
Date: le 26 mai 2008 à 11:36

Plop !

Non, j'avais rien vu non plus dans le man qui ressemble à une fonction abs(). Mais tu peux bidouiller en faisant racine carrée de ton nombre élevé au carré :
echo "x = -2;  sqrt(x * x)" | usr/bin/bc

Re: bc : afficher le zéro d'un "résultat décimal"
Avatar
Auteur: Иван (IP enregistrée)
Date: le 26 mai 2008 à 13:40

oui, mais alors on perd en précision...
scale=2
x=-1/3
if (x < 0) "-0"; if (x > 0) "0"; sqrt(x^2)
-0.31 # ça peut paraître négligeable, mais...


scale=1
x=-1/3
if (x < 0) "-0"; if (x > 0) "0"; sqrt(x^2)
-00 [i]# ...ça, ça l'est moins.


Bah, t'esquagasse pas, va...

Awk a définitivement l'air mieux adapté à ce genre de manipulation.

En tout cas, je te remercie, Blini, de ta persévérance.



S'il n'y avait que le café, ce ne serait rien.
Mais, ici, tout est bon, alors vous pouvez me garder ma serviette... Je reviendrai.image : biere



Nom du forum : (antispam) - (en développement:saisir un texte pour le message, rempli cette zone automatiquement)
Votre nom: 
Votre email: 
Sujet: 

 
Ce forum est boosté par Phorum.