12
votes

Bash multipliant décimal à int

Je lis le prix de l'utilisateur de l'utilisateur. Quand je multiplie l'entrée avec int comme ceci

t = "$ ((prix * qty))" | BC ; donne Ligne 272: 12.00: Erreur de syntaxe: opérateur arithmétique non valide (jeton d'erreur est "0,00") ou .50

Selon l'entrée de l'utilisateur. Comment puis-je multiplier ces deux variables et obtenir un total avec 2 points décimaux?


2 commentaires

WOW! C'est bon! Je n'ai jamais revu des réponses ce qui est rapidement dans tous les autres forums, peu importe la manière dont ils sont actifs et que nous obtenons principalement "Nous ne ferons pas votre mission pour vous". Cela a fonctionné pour moi t = € $ qtys \ * $ Prix | BC ; C'est également arrondi prix à 2 décimales sans échelle. Pour une raison quelconque, juste prix * Qté me donnait la commande introuvable.


Une chose à retenir est que Bash n'a pas vraiment de types de données, sauf les chaînes. Chaque variable se présente à une chaîne, il peut donc vous aider à vous rappeler que cela. Différents programmes bien sûr traiteront certaines cordes de manière particulière.


5 Réponses :


3
votes
T="$(echo "$PRICE*$QTY" | bc)"

2 commentaires

Je reçois (standard_in) 2: erreur de syntaxe idk pourquoi. c'est presque le même que ci-dessus


@svenus: Celui-ci travaille pour moi. Je ne sais pas pourquoi vous obtenez cette erreur de BC .



9
votes
awk -vp=$PRICE -vq=$QTY 'BEGIN{printf "%.2f" ,p * q}'

4 commentaires

./menu3.sh: Ligne 278: 12.25: Erreur de syntaxe: opérateur arithmétique non valide (jeton d'erreur est "0,25")


Supprimer le $ (()) . Bash ne flotte pas arithmétique. Si vous souhaitez définir 2 décimales, utilisez l'échelle = 2


Vous avez besoin de signes de dollar avant chaque nom de variable.


var = $ (écho "échelle = 2; $ prix * $ qté" | bc) me donne (standard_in) 2: erreur de syntaxe



18
votes

Ceci fonctionne:

PRICE=1.1
QTY=21
RES=$(echo "scale=4; $PRICE*$QTY" | bc)
echo $RES


0 commentaires

1
votes

Tout d'abord, essayant de faire de l'arithmétique de point flottant avec BC (1) code> sans utiliser le drapeau -l code> est obligé de vous donner des réponses amusantes:

sarnold@haig:~$ bc -q
3.5 * 3.5
12.2
sarnold@haig:~$ bc -q -l
3.5 * 3.5
12.25


1 commentaires

La plupart des $ (()) avec la Colombie-Britannique, j'ai essayé m'a donné des erreurs. Doit être à cause de la (())? Merci pour la clarification.



1
votes

vous pouvez utiliser mul = 0,8 exp = 200 texp = awk -vp = $ mul -vq = $ exp 'commencer {printf "% .2f", p * q}'

J'espère que cela va fonctionner.


1 commentaires

S'il vous plaît éditer votre réponse. Sa droite, mais pas correctement formatée