我知道这是一个非常愚蠢的问题,但我不知道如何在 bash 中做到这一点:
20 / 30 * 100
应该是
66.67
,但是expr说的是0
,因为它不支持浮动。
Linux 中什么命令可以代替 expr 并进行此等式?
bc
会为您完成此操作,但顺序很重要。
> echo "scale = 2; 20 * 100 / 30" | bc
66.66
> echo "scale = 2; 20 / 30 * 100" | bc
66.00
或者,对于您的具体情况:
> export ach_gs=2
> export ach_gs_max=3
> x=$(echo "scale = 2; $ach_gs * 100 / $ach_gs_max" | bc)
> echo $x
66.66
无论您选择什么方法,都可以将其作为一项功能纳入其中,让您的生活更轻松:
#!/bin/bash
function pct () {
echo "scale = $3; $1 * 100 / $2" | bc
}
x=$(pct 2 3 2) ; echo $x # gives 66.66
x=$(pct 1 6 0) ; echo $x # gives 16
只需在awk中完成即可
# awk 'BEGIN{print 20 / 30 * 100}'
66.6667
将其保存到变量
# result=$(awk 'BEGIN{print 20 / 30 * 100}')
# echo $result
66.6667
我一般使用perl:
perl -e 'print 10 / 3'
如 bash 手册页中所述:
shell 允许在某些情况下对算术表达式进行求值...求值是在固定宽度整数中完成的,不检查溢出,但除以 0 会被捕获并标记为错误。
您可以提前乘以 100 以获得更好的部分结果:
let j=20*100/30
echo $j
66
或者 10 的更高倍数,并想象它所属的小数位:
let j=20*10000/30
echo $j
66666
> echo "20 / 30 * 100" | bc -l
66.66666666666666666600
这是 paxdiablo 答案的简化。 -l 将小数位数(小数点后的位数)设置为 20。它还加载带有三角函数和其他内容的数学库。
另一个明显的选择:
python -c "print(20 / 30 * 100)"
假设您使用的是 Python 3。否则,请使用
python3
。
expr 不支持浮点数,
你可以制作一个简单的c计算器并使用,
./mycal 22 / 7.0