число с плавающей точкой в ​​выражении - PullRequest
6 голосов
/ 02 марта 2010

Я пытаюсь получить число с плавающей точкой из этого:

totalmark=$(expr $sum / $subjects )

Это правильно?

Ответы [ 4 ]

10 голосов
/ 02 марта 2010

bash не поддерживает float, используйте awk или bc / dc

например, awk

totalmark=$(awk 'BEGIN{print $sum / $subjects}')

или до н.э.

totalmark=$(echo "scale=2;$sum/$subjects"|bc)

если у вас есть возможность использовать другие оболочки, кроме bash, попробуйте zsh или ksh

$ zsh -c 'echo $((4/1.3))'
3.0769230769230766

$ ksh -c 'echo $((4/1.3))'
3.07692307692307692
5 голосов
/ 02 марта 2010

Я не думаю, что у bash есть возможности с плавающей точкой. Вы можете попробовать:

echo "$sum/$subjects" | bc -l
3 голосов
/ 02 марта 2010

Bash не поддерживает арифметику с плавающей точкой. Попробуйте bc вместо.

2 голосов
/ 02 марта 2010
totalmark=$(echo "scale=4;$sum/$subjects"|bc)

Кстати, три ответа говорят, что Bash не поддерживает арифметику с плавающей запятой. Хотя это правда, expr - это внешняя программа (/usr/bin/expr для меня), и именно она, в частности, в данном случае не поддерживает плавающие значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...