unix 在bash中执行浮点数学运算时出现“算术运算符无效”

zte4gxcn  于 2023-02-04  发布在  Unix
关注(0)|答案(5)|浏览(200)

下面是我的脚本:

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")?

b5lpy0ml

b5lpy0ml1#

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))
wydwbb8l

wydwbb8l2#

计算浮点数的另一种方法是使用AWK rounding功能,例如:

a=502.709672592
b=501.627497268
echo "$a $b" | awk '{print $1 - $2}'

1.08218
pkmbmrz7

pkmbmrz73#

如果你不需要浮点精度,你可以简单地去掉小数部分。
echo $var | cut -d "." -f 1 | cut -d "," -f 1
剪切值的整数部分。2使用两次剪切的原因是为了分析整数部分,以防区域设置可能使用点来分隔小数,而其他一些可能使用逗号。

    • 编辑**:

或者,为了自动化区域设置,可以使用locale
echo $var | cut -d $(locale decimal_point) -f 1

8i9zcol2

8i9zcol24#

你可以改变你正在使用的shell。如果你正在使用bash shell bash scriptname.sh执行你的脚本,尝试使用ksh来执行你的脚本。Bash不支持涉及浮点数的算术运算。

3duebb1j

3duebb1j5#

大声喊出bc命令-它完全拯救了我的一天!这是一个简单的答案,但它的工作就像一个魅力。

a=1.1
b=1.1

echo $a + $b | bc -l
# Output:
2.2

#SUM
sum=$(echo $a + $b | bc -l) 
echo $sum
# Output
2.2

bc是一个命令行计算器,允许用户在终端上执行数学计算。

相关问题