Bash только дает целое число как вывод независимо от входа при выполнении вычислений

Когда я ввожу в следующих командах:

result=$(( ($1-32)*(5/9) ))
echo $result

переменная, результат, всегда оценивает к целому числу, оценивает ли уравнение к десятичному числу или нет. Почему это?

1
задан 9 September 2019 в 22:24

1 ответ

bash окружите исходно только целочисленную арифметику поддержек. В частности, с тех пор 5 меньше чем 9, (5/9) оценит для обнуления независимо от других условий в продукте.

В зависимости от Ваших требований Вы смогли делать то, что Вы хотите (все еще использование целочисленной арифметики) путем изменения порядка операций т.е. тогда как

$ bash -c 'echo $(( ($1-32)*(5/9) ))' bash 35
0

если Вы позволяете * и / иметь их естественный приоритет

$ bash -c 'echo $(( ($1-32)*5/9 ))' bash 35
1

потому что (35-32)*5 15, который, когда разделенный на целое число на 9 урожаи 1. Если Вы на самом деле хотите арифметику с плавающей точкой затем, можно использовать внешнюю программу такой как bc или awk например.

$ bash -c 'echo "scale = 2; ($1-32)*(5/9)" | bc' bash 35
1.65

или переключитесь на оболочку, которая поддерживает арифметику с плавающей точкой, такой как ksh:

$ ksh -c 'echo $(( ($1-32)*5/9 ))' ksh 35.0
1.66666666666666667

(отметьте использование аргумента 35.0 вызвать продвижение с плавающей точкой).

9
ответ дан 3 December 2019 в 06:20

Другие вопросы по тегам:

Похожие вопросы: