0
votes

Opération arithmétique dans le script shell

Mon script shell ressemble à ceci, xxx

puisque 5/12 résulte de 0,416 puis 0,416 * 100 Il devrait donner 41,6 Mais je reçois "successrate" comme 0. Son arrondi de la valeur du flotteur.

Je veux que le résultat final soit 41 comme ceci, S'il vous plaît aidez-moi dans ce merci


3 commentaires

Oui, awk simplifiera ceci. Veuillez lire au moins Tutoriel AWK - Printf et les spécificateurs de format section ci-dessous. Bonne chance.


Il est fort peu probable que vous utilisiez une coquille de style Bourne qui ne prend pas en charge l'expression arithmétique standard POSIX. Utilisez aa = $ ((Sonecount / szerocount)) et successrate = $ ((AA * 100)) à la place. Expr est obsolète sauf pour une correspondance d'expression régulière. (Mais plus au point, la plupart des coquillages ne prennent pas en charge l'arithmétique de point flottant; zsh est une exception notable.)


Vous pouvez trouver une liste assez comperhensive de solutions ici: Stackoverflow.com/Questtions/12722095/...


4 Réponses :


2
votes

bash, et probablement d'autres coquilles similaires, ne prend pas en charge les opérations de points flottants:

L'évaluation est effectuée dans les entiers à largeur fixe sans chèque pour débordement p> blockquote>

http://man7.org /Linux/man-pages/man1/bash.1.html#arithmetic_evaluation p>

Vous pouvez utiliser BC code> à la place, avec les opérations MathLib activées: P>

$ successRate=$(echo "${sOneCount} / ${sZeroCount} * 100" | bc -l)
$ echo ${successRate}
41.66666666666666666600


0 commentaires

2
votes

Vous devriez utiliser AWK, pas Shell, pour les calculs (et probablement tout ce que vous faites aussi, mais nous ne pouvons pas voir le reste de votre script): xxx

note qu'il protège contre une fracture par erreur zéro.


0 commentaires

1
votes

Remarque dans la page Expr man (1) que l'opérateur / vous donne le quotient , impliquant Ceci est une arithmétique intergère seulement.

Vous pouvez obtenir le succès intégral en multipliant le numérateur par 100 premier xxx

ou, à bash, Vous n'avez pas besoin d'appeler à EXPR - Utilisez la syntaxe d'expression arithmétique intégrée: xxx


(1): la page man "pour le BSD Expr sur mon Mac est plus explicite: / renvoie le résultat de "Division entier" de "Arguments valorisés entier".


0 commentaires

1
votes

Vous pouvez facilement écrire votre propre calculatrice / eval dans awk pour la plupart des cas de base

par exemple: xxx

ou, avec un Un léger changement peut accepter plus d'arguments xxx


0 commentaires