Gawk, division, décimales
eZula
Messages postés
3391
Date d'inscription
Statut
Contributeur
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'essaie de diviser des nombres en batch et bien sur impossible d'obtenir la valeur décimale correcte :
le résultat souhaité est 2013,150684931507
J'essaie avec Gawk mais c'est un peu la galère :
résultat : 2013.15, ce qui est mieux mais incomplet. J'ai essayé de le tourner autrement en utilisant par exemple printf "%2.7f", printf ("%%s\t%.1f\n"... ça ne marche pas et il y a des erreurs de backslash mais je ne sais pas si elles sont dues à ma syntaxe ou a un pb d'interprétation des % au sein de gawk (comme cela arrive sous windows avec des variables)
Auriez-vous une idée de la solution pour obtenir ce résultat souhaité avec gawk (à savoir le maximum de décimales) ?
Merci
J'essaie de diviser des nombres en batch et bien sur impossible d'obtenir la valeur décimale correcte :
SET /A NbJrDifference=734800/365 ECHO %NbJrDifference% => 2013
le résultat souhaité est 2013,150684931507
J'essaie avec Gawk mais c'est un peu la galère :
ECHO %NbJrDifference%|GAWK "{printf "$1/365"}"
résultat : 2013.15, ce qui est mieux mais incomplet. J'ai essayé de le tourner autrement en utilisant par exemple printf "%2.7f", printf ("%%s\t%.1f\n"... ça ne marche pas et il y a des erreurs de backslash mais je ne sais pas si elles sont dues à ma syntaxe ou a un pb d'interprétation des % au sein de gawk (comme cela arrive sous windows avec des variables)
Auriez-vous une idée de la solution pour obtenir ce résultat souhaité avec gawk (à savoir le maximum de décimales) ?
Merci
A voir également:
- Gawk, division, décimales
- Microsoft skype division - Télécharger - Téléphonie & Visio
- 2 décimales après la virgule excel ✓ - Forum Excel
- Mergefield 2 décimales ✓ - Forum Excel
- Javascript arrondir à 2 décimales - Forum Webmastering
- Arrondir à 2 décimales après la virgule - calculateur javascript ✓ - Forum Javascript
7 réponses
hello
gawk en ligne de commande est la galère en DOS.
utiliser un fichier
gawk en ligne de commande est la galère en DOS.
utiliser un fichier
gawk -f xxet dans xx
{printf "%2.7f" $1/365}
merci dubcek!
Mais je bute encore
il ne donne en plus que deux décimales, en dehors du plantage :(
Mais je bute encore
C:\Users\g\Desktop\Recent>ECHO 734801 | gawk -f x.txt gawk: x.txt:1: (FILENAME=- FNR=1) fatal: not enough arguments to satisfy format string '%2.7f2013.15' ^ ran out for this one
il ne donne en plus que deux décimales, en dehors du plantage :(
ça y est j'ai trouvé en creusant par ici http://forum.ubuntu-fr.org/viewtopic.php?id=422229
et x.txt :
ce qui donne 2013.15342465753430000000
Ceci dit et pour avoir de la marge, j'ai mis 20 décimales (%.20f\n). Mais peut être y a-t-il moyen plus général et plus précis de lui indiquer d'écrire autant de décimales qu'il y en a, dans cet exemple 13 (ce qui répondrait à 100% à ma question :) )?
ECHO %NbJrDifference%|gawk -f "x.txt"
et x.txt :
{printf "%.20f\n", $1/365}
ce qui donne 2013.15342465753430000000
Ceci dit et pour avoir de la marge, j'ai mis 20 décimales (%.20f\n). Mais peut être y a-t-il moyen plus général et plus précis de lui indiquer d'écrire autant de décimales qu'il y en a, dans cet exemple 13 (ce qui répondrait à 100% à ma question :) )?
effectivement, il manquait une virgule pour l'argument du printf.
voir la doc printf, c'est le printf du C
http://www.linux-france.org/article/man-fr/man3/printf-3.html
voir la doc printf, c'est le printf du C
http://www.linux-france.org/article/man-fr/man3/printf-3.html
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
utiliser ce code pour supprimer les zéros en fin de chaine
{s=sprintf("%.20f\n", $1/365); sub("0*$", "", s); printf s}
ah, le résultat de la dernière commande ne semble pas éliminer les zéros, sauf erreur de ma part :
J'ai pensé à cette parade gourmande sinon :
Mais si elle peut se faire directement avec gawk ce n'est pas plus mal. Je pensais qu'il existait une expression pour matérialiser le nombre max de décimales mais c'est compliqué à trouver, si tenté que cela existe :)
C:\Users\g\Desktop\Recent>ECHO 734801 | gawk -f "x.txt" 2013.15342465753430000000
J'ai pensé à cette parade gourmande sinon :
C:\Users\g\Desktop\Recent>ECHO 734801 | gawk -f "x.txt" | SED "s/0*$//" 2013.1534246575343
Mais si elle peut se faire directement avec gawk ce n'est pas plus mal. Je pensais qu'il existait une expression pour matérialiser le nombre max de décimales mais c'est compliqué à trouver, si tenté que cela existe :)