it-swarm.com.ru

"Неверный арифметический оператор", выполняющий вычисления с плавающей точкой в ​​bash

Вот мой сценарий, он довольно понятен:

d1=0.003
d2=0.0008
d1d2=$((d1 + d2))

mean1=7
mean2=5
meandiff=$((mean1 - mean2))

echo $meandiff
echo $d1d2

Но вместо того, чтобы получить намеченный результат: 0.0038 2 Я получаю ошибку Invalid Arithmetic Operator, (error token is ".003")?

11
John Smith

bash не поддерживает арифметику с плавающей точкой. Вам нужно использовать внешнюю утилиту, такую ​​как bc.

# Like everything else in Shell, these are strings, not
# floating-point values
d1=0.003
d2=0.0008

# bc parses its input to perform math
d1d2=$(echo "$d1 + $d2" | bc)

# These, too, are strings (not integers)
mean1=7
mean2=5

# $((...)) is a built-in construct that can parse
# its contents as integers; valid identifiers
# are recursively resolved as variables.
meandiff=$((mean1 - mean2))
24
chepner

Если вам не нужна точность с плавающей запятой, вы можете просто удалить десятичную часть.

echo $var | cut -d "." -f 1 | cut -d "," -f 1

вырезает целую часть значения. Причиной использования cut дважды является синтаксический анализ целочисленной части в случае, если региональные настройки могут использовать точки для разделения десятичных дробей, а некоторые другие могут использовать запятые.

0
MT San