这是我的脚本:
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")?
这是我的脚本:
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")?
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))
bash
没有支持浮点运算的编写。 - chepner另一种计算浮点数的方法是使用AWK舍入功能,例如:
a=502.709672592
b=501.627497268
echo "$a $b" | awk '{print $1 - $2}'
1.08218
echo $var | cut -d "." -f 1 | cut -d "," -f 1
此命令提取值的整数部分。两次使用cut是为了解析整数部分,因为某些区域设置可能使用点来分隔小数部分,而其他一些区域设置可能使用逗号。
编辑:
或者,为了自动化区域设置,可以使用locale
。
echo $var | cut -d $(locale decimal_point) -f 1
locale
可以做到这一点。好的先生,我点了赞! - BUFUbash scriptname.sh
,尝试使用 ksh 执行脚本。Bash 不支持涉及浮点数的算术运算。向 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
是一个命令行计算器,可以让用户在终端上进行数学计算。