76 votes

Comment faire en sorte que bc(1) affiche le zéro non significatif ?

Je fais quelque chose comme ceci dans un Makefile :

 echo "0.1 + 0.1" | bc

(dans le fichier réel les nombres sont dynamiques, bien sûr)

Il imprime .2 mais je veux qu'il imprime 0.2 .

J'aimerais le faire sans recourir à sed mais je n'arrive pas à trouver comment obtenir bc pour imprimer le zéro. Ou est-ce que bc n'est tout simplement pas capable de le faire ?

49voto

elias Points 6255

Vous pouvez également recourir à awk pour formater :

  echo "0.1 + 0.1" | bc | awk '{printf "%f", $0}'

ou avec awk lui-même faisant le calcul :

  echo "0.1 0.1" | awk '{printf "%f", $1 + $2}'

40voto

potong Points 18653

Cela pourrait fonctionner pour vous:

 echo "x=0.1 + 0.1; if(x<1) print 0; x" | bc

14voto

choroba Points 56333

Je ne trouve rien sur le format de sortie dans la documentation. Au lieu de sed, vous pouvez également atteindre printf :

 printf '%3.1f\n' $(bc<<<0.1+0.1)

3voto

gomibako Points 73
$ bc -l <<< 'x=-1/2; if (length (x) == scale (x) && x != 0) { if (x < 0) print "-",0,-x else print 0,x } else print x'

Celui-ci est pur bc . Il détecte le zéro non significatif en comparant le résultat du length avec le scale de l'expression. Cela fonctionne à la fois sur les nombres positifs et négatifs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X