Calcul de la fraction flottante de la commande awk

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
$

solution de contournement

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

Calcul de la fraction flottante de la commande awk
Commande pour le répertoire courant Python
Demandez Pi avec la commande bc
Résultat du calcul après la virgule décimale en Python
Police à virgule flottante 24h00
Voir ici pour la quantité de mémoire libre de la commande free
Les nombres de type flottant ne sont pas les mêmes que la minorité de nombres décimaux
Installez la commande pip
Votre propre Koredake est une commande Linux
Rechercher des fichiers volumineux sous Linux à partir de la ligne de commande