【发布时间】:2010-11-08 10:55:08
【问题描述】:
我有变量,我想找到一个除以另一个的值。我应该使用哪些命令来执行此操作?
【问题讨论】:
-
这真的和编程有关吗? [stackoverflow.com/faq]
-
@frank-v Bash 可用于编程...此外,指向常见问题的链接不起作用
标签: linux math command-line divide
我有变量,我想找到一个除以另一个的值。我应该使用哪些命令来执行此操作?
【问题讨论】:
标签: linux math command-line divide
在 bash shell 中,用$(( ... )) 包围算术表达式
$ echo $(( 7 / 3 ))
2
虽然我认为你仅限于整数。
【讨论】:
echo 5/2 | bc -l
2.50000000000000000000
'bc' 中的这个 '-l' 选项允许浮动结果
【讨论】:
-l,默认情况下您会得到 20 个小数位并且会加载一个定义附加函数(例如正弦)的数学库;要明确指定小数位数,请在表达式前面加上scale={numPlaces};(也),如@user1504475 的答案所示。换句话说:-l 是指定 scale=20; 的便捷替代方案,但由于加载库而导致性能成本 - 不过,对现实世界的影响似乎可以忽略不计。
更好的方法是使用“bc”,一个任意精度的计算器。
variable=$(echo "OPTIONS; OPERATIONS" | bc)
例如:
my_var=$(echo "scale=5; $temp_var/100 + $temp_var2" | bc)
其中“scale=5”是准确度。
man bc
附带几个使用示例。
【讨论】:
scale 默认为整数除法 - 除非您指定 -l,如下面的 @raytrace 注释,这显然默认为您提供 20 个小数位,但还会加载具有附加功能的库。
【讨论】:
我仍然更喜欢使用 dc,它是一个 RPN 计算器,因此以 4 位精度将 67 除以 18 的快速会话看起来像
>dc
4k
67
18/p
3.7222
q
>
显然,更多可用:man dc
【讨论】:
man 的旅行:RPN = 反向波兰表示法;简而言之:首先输入操作数,然后输入运算符。需要一个终止的p 来输出结果。上述计算的非交互版本为:dc -e '4k 67 18 / p'。警告:不设置精度({numPlaces}k)默认为 0,即整数除法。
在 bash 中,如果您的除法中不需要小数,您可以这样做:
>echo $((5+6))
11
>echo $((10/2))
5
>echo $((10/3))
3
【讨论】:
我假设 Linux 控制台 是指 Bash。
如果X 和Y 是您的变量,$(($X / $Y)) 会返回您要求的内容。
【讨论】:
使用 bash 将 $a 除以 $b 的整数除法示例:
echo $((a/b))
【讨论】:
您可以使用 raytrace 的答案进行其他操作。您可以使用反引号来使用另一个 shell 调用的标准输出,然后进行一些计算。例如,我想知道几个文件中前 100 行的文件大小。 wc -c 的原始大小以字节为单位,我想知道千字节。这是我所做的:
echo `cat * | head -n 100 | wc -c` / 1024 | bc -l
【讨论】:
你应该尝试使用:
echo "scale=4;$variablename/3"|bc
【讨论】:
你也可以使用 perl -e
perl -e 'print 67/8'
【讨论】:
我也遇到了同样的问题。整数除法很容易,但十进制数并不那么容易。
如果您有 2 个数字,例如 3.14 和 2.35,然后除以这些数字,
代码将是 Division=echo 3.14 / 2.35 | bc
回声“$部门”
报价不同。不要混淆,它位于键盘上的 esc 按钮下方。
唯一的区别是 | bc 和这里的 echo 用作算术计算的运算符而不是打印。
所以,我添加了 echo "$Division" 来打印值。请让我知道这对你有没有用。谢谢。
【讨论】:
some code here 只是包裹在尖锐的口音中。