Bonjour
Dans la commande awk, le résultat d'un calcul fractionnaire flottant tel que ```echo 2.3 | awk '($ 1 * 100)% 10 == 0' `ne correspond pas au calcul exact (cette condition est
$ 1 * 100 '' n'est pas
230 '' mais faux).
$ echo 2.3 | awk '($1*100)%10==0'
$
$ diff -u <(seq 2 .1 3) <(seq 2 .01 3 | awk '($1*100)%10==0')
2
2.1
-2.2
-2.3
2.4
2.5
2.6
$
La même chose est vraie pour Python, donc cela ne semble pas être un problème uniquement avec awk.
$ diff -u <(seq 2 .1 3) <(seq 2 .01 3 | python3 -c 'import sys; [print(i, end="") for i in sys.stdin if (float(i)*100)%10==0]')
2
2.1
-2.2
-2.3
2.4
2.5
2.6
$
J'ai conçu un moyen d'écrire la condition sous la forme int ($ 1 * 100 + 0,5)% 10 == 0
, et dans cet exemple, une correspondance a été obtenue.
$ echo 2.3 | awk 'int($1*100+0.5)%10==0'
2.3
$ diff -q <(seq 2 .1 3) <(seq 2 .01 3 | awk 'int($1*100+0.5)%10==0')
$
Recommended Posts