# Calculatrice en mode console : bc -l

**URL:** <https://www.debian-fr.org/t/calculatrice-en-mode-console-bc-l/81196>\
**Category:** Trucs et Astuces\
**Tags:** bash, sh\
**Created:** [Février 9, 2020, 1:30 UTC](https://www.debian-fr.org/t/calculatrice-en-mode-console-bc-l/81196 "2020-02-09T01:30:31Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon36725218](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/8e8cbc/32.png) [@anon36725218](https://www.debian-fr.org/u/anon36725218)\
**Post date:** [Février 9, 2020, 1:30 UTC](https://www.debian-fr.org/t/calculatrice-en-mode-console-bc-l/81196/1 "2020-02-09T01:30:31Z")

</div>

**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](http://php.net) 🙂 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 😉 bonne nuitée debarien(e)s !

Astuce trouvée ici : [Operation-mathematique-simple-avec-Bash](https://www.system-linux.eu/index.php?post/2009/01/17/Operation-mathematique-simple-avec-Bash#c75) commentaire de Kévin Hinault que j’ai ajouté à ma page [HOW TO \* GNU/Linux \* Trucs et Astuces](http://howto.zw3b.net/linux/trucs-et-astuces) 😉

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 🙂 Bon dimanche Debarien(e)s 🙂

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Février 9, 2020, 10:04 UTC](https://www.debian-fr.org/t/calculatrice-en-mode-console-bc-l/81196/2 "2020-02-09T10:04:27Z")

</div>

Bonjour,

Tiens c’est étonnant, si je fais :

```auto
$ 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 :

```auto
$ 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 :

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

```

Mais :

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

```

Et, pour finir :

```auto
$ 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 :

```auto
$ 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 :

```auto
$ 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

```

---

<div class="post-metadata">

**Author:** ![grandtoubab](https://www.debian-fr.org/user_avatar/www.debian-fr.org/grandtoubab/32/4505_2.png) [@grandtoubab](https://www.debian-fr.org/u/grandtoubab)\
**Post date:** [Février 9, 2020, 11:42 UTC](https://www.debian-fr.org/t/calculatrice-en-mode-console-bc-l/81196/4 "2020-02-09T11:42:17Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Février 9, 2020, 11:53 UTC](https://www.debian-fr.org/t/calculatrice-en-mode-console-bc-l/81196/5 "2020-02-09T11:53:39Z")

</div>

> [@doe](#):
>
> `scale` semble s’appliquer à tous les résultats d’opérations intermédiaires.

En effet, cela explique les résultats ! 😉

ça n’empêche que `awk` semble vraiment plus fiable ! 😛  
cf : la documentation «&nbsp;fournie&nbsp;» par @grandtoubab

---

<div class="post-metadata">

**Author:** ![anon36725218](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/8e8cbc/32.png) [@anon36725218](https://www.debian-fr.org/u/anon36725218)\
**Post date:** [Février 9, 2020, 2:18 UTC](https://www.debian-fr.org/t/calculatrice-en-mode-console-bc-l/81196/6 "2020-02-09T14:18:36Z")

</div>

> [@PengouinPdt](#):
>
> n’empêche que `awk` semble vraiment plus fiable ! 😛

PHP aussi 🙂 çà me rassure ^^

> [@PengouinPdt](#):
>
> Tiens c’est étonnant, si je fais :
> 
> ```auto
> $ echo $((145/8*4561))
> 82098
> $ echo 145/8*4561 |bc
> 82098
> 
> ```

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))` 😉 çà doit être juste cela ^^ 😛
