Mon script shell ressemble à ceci, 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. P> Je veux que le résultat final soit 41 comme ceci,
S'il vous plaît aidez-moi dans ce merci p> p>
4 Réponses :
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
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): note qu'il protège contre une fracture par erreur zéro. p> p>
Remarque dans la page Vous pouvez obtenir le succès intégral en multipliant le numérateur par 100 premier em> p> ou, à bash, Vous n'avez pas besoin d'appeler à EXPR - Utilisez la syntaxe d'expression arithmétique intégrée: p> (1): la page man "pour le BSD Expr code> man (1) sup> que l'opérateur
/ code> vous donne le quotient
Expr code> sur mon Mac est plus explicite:
/ code> renvoie le résultat de "Division entier" de "Arguments valorisés entier". P> P>
Vous pouvez facilement écrire votre propre calculatrice / eval dans par exemple: p> ou, avec un Un léger changement peut accepter plus d'arguments p> awk code> pour la plupart des cas de base
Oui,
awk code> simplifiera ceci. Veuillez lire au moins Tutoriel AWK - Printf et les spécificateurs de format B> 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)) code> et
successrate = $ ((AA * 100)) code> à la place.
Expr code> 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 code> est une exception notable.)
Vous pouvez trouver une liste assez comperhensive de solutions ici: Stackoverflow.com/Questtions/12722095/...