[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 ]