Когда я ввожу в следующих командах:
result=$(( ($1-32)*(5/9) ))
echo $result
переменная, результат, всегда оценивает к целому числу, оценивает ли уравнение к десятичному числу или нет. Почему это?
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
вызвать продвижение с плавающей точкой).