Calculatrice en mode console : bc -l

Tags: #<Tag:0x00007ff8b224e700> #<Tag:0x00007ff8b224e570>

Calculator

À ne pas utiliser :
echo $((145/8*4561)
mauvais calcul.
retourne 82098


Utiliser la commande : bc - l
An arbitrary precision calculator language avec l’option -l (–mathlib) : Define the standard math library.

echo 145/8*4561 | bc -l
calcul correct.
retourne 82668.12500000000000000000

J’ai vérifié en PHP :slight_smile: OK
php -r 'echo (145/8*4561)."\n";' calcul correct, retourne 82668.125

echo 12*3.02 | bc -l
calcul correct, arrive bien à multiplier avec la virgule.
retourne 36.24


Histoire de passer le mot :wink: bonne nuitée debarien(e)s !

Astuce trouvée ici : Operation-mathematique-simple-avec-Bash commentaire de Kévin Hinault que j’ai ajouté à ma page HOW TO * GNU/Linux * Trucs et Astuces :wink:

Cordialement,
Romain


Edit de la modération : Il vous a déjà été notifié de limiter les liens vers votre site. Un seul lien suffit ; les personnes seront capables de remonter dans l’arborescence si besoin !
De même, j’ai viré les liens pour Twitter - notre forum n’est pas une vitrine ou une succursale de cet outil largement décrié pour certaines dérives. Merci d’en tenir compte.

NdMoi-même @ZW3B : OKay pour Twitter sinon comment-faire sous GNU/Linux des trucs et astuces :slight_smile: Bon dimanche Debarien(e)s :slight_smile:

Bonjour,

Tiens c’est étonnant, si je fais :

$ echo $((145/8*4561))
82098
$ echo 145/8*4561 |bc
82098

Maintenant comme tu le fais remarquer le résultat juste semble en effet être :

$ echo 145/8*4561 |bc -l
82668.12500000000000000000

Pourtant, si je ne veux que deux ou trois digit après la virgule, je n’obtiens pas le même résultat :

$ echo "scale=2; 145/8*4561" |bc -l
82645.32
$ echo "scale=3; 145/8*4561" |bc -l
82668.125

Mais :

$ echo "scale=2; 145*4561/8" | bc -l
82668.12

Et, pour finir :

$ echo "145/8*4561" | bc -l | awk '{ printf "%.2f\n", $1 }'
82668,00

Un manque de fiabilité ???

En tout cas, awk tout seul est bien plus fiable, exemple :

$ awk 'BEGIN { print 145/8*4561 }'
82668,1

$ awk 'BEGIN { printf "%.2f\n", 145/8*4561 }'
82668,12

Pour avoir le résultat affiché avec un point au-lieu d’une virgule :

$ LC_ALL=en_US.UTF-8 awk 'BEGIN { printf "%.2f\n", 145/8*4561 }'
82668.12
$ LC_NUMERIC=C awk 'BEGIN { printf "%.2f\n", 145/8*4561 }'
82668.12
1 J'aime

A propos de la commande bc
https://abs.traduc.org/abs-5.3-fr/ch15s08.html

1 J'aime

En effet, cela explique les résultats ! :wink:

ça n’empêche que awk semble vraiment plus fiable ! :stuck_out_tongue:
cf : la documentation “fournie” par @grandtoubab

PHP aussi :slight_smile: çà me rassure ^^

Mauvais résultat je le répète.

Ils ont dû oublier de mettre l’option -l (–mathlib) de bc dans leur script echo $((calc)) :wink: çà doit être juste cela ^^ :stuck_out_tongue:

1 J'aime