Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
bc : afficher le zéro d'un "résultat décimal"

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?

Poste le Thursday 22 May 2008 14:04:24
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"
Envoyé par: tellmewhy

Bonsoir NBaH, :-)

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. :-(

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

Poste le Thursday 22 May 2008 20:58:29
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"

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...
(?)

J'ai pris le [[color=orange] Grymoire [/color]] 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...

Poste le Friday 23 May 2008 05:51:02
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"

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

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

Projet logiciel libre: RefPerSys

Poste le Friday 23 May 2008 07:02:22
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"
Envoyé par: tellmewhy

Bonjour NBaH, :-)


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.




Poste le Friday 23 May 2008 07:50:59
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"
Envoyé par: tellmewhy

Bonjour Basile STARYNKEVITCH, :-)

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.:-(

Poste le Friday 23 May 2008 07:54:27
Répondre     Citer    
Résolu: afficher le zéro d'un "résultat décimal"

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 :
Citation

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 !

Poste le Friday 23 May 2008 15:26:34
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"
Envoyé par: tellmewhy

Bonjour NBaH, :-)

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. :-(

En tout cas, ravi que tu aies trouvé une solution, et bravo ! ;-)




Poste le Friday 23 May 2008 16:11:18
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"
Envoyé par: Blini

Salut,

Avec bc, ceci semble marcher :

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

Poste le Saturday 24 May 2008 17:57:24
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"

Nous avons un gagnant ! smiling smiley# smiling smiley# smiling smiley#

Poste le Saturday 24 May 2008 18:53:28
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"
Envoyé par: Blini

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". :-\

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)... :-p

Poste le Sunday 25 May 2008 10:32:56
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"
Envoyé par: Blini

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

Poste le Sunday 25 May 2008 10:48:57
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal" (le retour)

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é...
(?)

Poste le Sunday 25 May 2008 12:05:00
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"
Envoyé par: Blini

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

Poste le Monday 26 May 2008 11:36:03
Répondre     Citer    
Re: bc : afficher le zéro d'un "résultat décimal"

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 # ...ç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.



[v]S'il n'y avait que le café, ce ne serait rien.[/v]
[^]Mais, ici, tout est bon, alors vous pouvez me garder ma serviette... Je reviendrai.[/^]O-uu-O

Poste le Monday 26 May 2008 13:40:58
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
bc : afficher le zéro d'un "résultat décimal"
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.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons