我知道这是一个非常愚蠢的问题,但我不知道如何在bash中执行它:
20 / 30 * 100
结果应该是66.67
,但expr 返回0
,因为它不支持浮点数。在Linux中,哪个命令可以取代expr执行这个等式?
我知道这是一个非常愚蠢的问题,但我不知道如何在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'
perl -e 'print "hello world"'
也不起作用。但是perl -e 'print "hello world\n"'
可以按预期工作。 - Sébastienperl -e 'print 10 / 3, "\n"'
- pglpython -c“print 10.0/3.0”
- emazzotta如bash手册所述:
在某些情况下,shell允许对算术表达式进行求值...计算使用固定宽度整数执行,没有检查溢出,但是除以0会被捕获并标记为错误。
您可以提前乘以100以获得更好的部分结果:
let j=20*100/30
echo $j
将数字乘以10的更高倍数,想象它所在的小数位:
66
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
。