[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux] calculons un peu



...
> > #! /bin/sh
> > d=403399
> > e=10000
> > f=$(($d / $e))
> >
> > # je ne suis pas parvenu à savoir comment mettre des décimales : 40.3399 ou
> > 40,3399
> >
> > c= $(($f * $a))
> essaie
> c = ($f * $a)

Nenni, ne marchera pas non plus.
$(($f * $a))
est bien correct, mais ça calcule uniquement sur les
nombres entiers. Il n'est pas non plus possible d'utiliser
des variables contenant des nombres à virgule flottante en
shell (ben oui, faut pas exagérer non plus ;)).

Soit tu utilises bc, comme ceci:
-----<snip>------
#!/bin/sh
# le facteur à appliquer est défini comme chaîne de caractères:
facteur="40.3399"
# nombre de chiffres derrière la virgule:
decimales=2
# la somme à convertir est reçue comme paramètre en ligne de
# commande:
somme=$1

if [ -z "$somme" ]; then
  # Pas de somme en euros spécifiée à la ligne de commande!
  # Afficher un message d'erreur sur STDERR (>&2):
  echo "ERREUR: Veuillez spécifier la somme en Euros à convertir" >&2
  exit 1
fi

# calcul de la somme en FB:
fb=$(echo "scale=$decimales; $somme * $facteur"|bc)

# affichage du résultat:
echo "$1 euros = $fb FB"
-----</snip>-----
Une autre possibilité est d'utiliser Perl qui, lui, sait calculer
avec des nombres à virgule flottante:
-----<snip>------
#!/usr/bin/perl
$facteur=40.3399;
$decimales=2;
$somme=shift;
if (! $somme) {
  print STDERR "ERREUR: Veuillez ...\n";
  exit(1);
}
$fb = $somme * $facteur;
printf("$somme euros = %s FB\n", $fb);
-----</snip>-----

Voilà ;-)
Pour le shell, tu devrais trouver de la doc sur ce genre de
choses dans le "Advanced-Bash-Scripting-HOWTO" (va voir sur
http://linuxdoc.org/, dans la section HOWTO - ça a peut-être
été traduit en français).

Si tu as une SuSE, installe le paquet "howtofr" (dans la
série "doc") et:
  zless /usr/share/doc/howto/fr/*Adv-Bash-Scr-HOWTO.gz
sinon, en anglais:
  zless /usr/share/doc/howto/en/Adv-Bash-Scr-HOWTO.gz

--
  -o) / Pascal Bleser                   ATOS Origin|
  /\\ \ e-Business Platform         Aachen, Germany|
 _\_v  \<guru@linuxbe.org> <pbleser@atosorigin.com>|
---------------------------------------------------|
Jesus saves, but Buddha makes incremental backups  :
---------------------------------------------------'

[ Soyez précis dans vos sujets svp afin de déterminer directement  ]
[ le type de demande...                                            ]
[ Pour vous (dés)inscrire, aller sur http://unixtech.be/ml.php     ]
[ Archives de la mailing list: http://archives.unixtech.be/linux/  ]
[ http://unixtech.be              Contact: listmaster@unixtech.be  ]