我会得到像 2743410360.320 这样的值,我想要像 2743410360 这样的值给一个变量。
我试过
INTValueOfGB=$ echo "($gb+0.5)/1" | bc
Run Code Online (Sandbox Code Playgroud)
但我越来越 (standard_in) 1: syntax error
我阅读了如何使用命令行计算器和 HERE 文档进行计算,但是我没有得到我所期望的并且找不到我的错误,我在 shell 中所做的是:
bc << HERE
>ibase=2
>obase=16
>1001
>HERE
100
Run Code Online (Sandbox Code Playgroud)
由于二进制 1001 是十六进制 9,我希望得到 9,但我得到了 100。
我在 GNU v. 1.06 中有以下示例(我无法确定与行长度有关的限制):
v=$(bc -l <<<"scale=100;4*a(1)"); echo $v
Run Code Online (Sandbox Code Playgroud)
返回:
3.141592653589793238462643383279502884197169399375105820974944592307\
8164062862089986280348253421170676
Run Code Online (Sandbox Code Playgroud)
是否可以删除此函数输出中的反斜杠和回车符,或者我正在寻找不存在的东西?
我阅读了有关如何让 bc 打印第一个零的主题,但这并不是我想要的。我想要更多...
我想要一个返回带有八位十进制数字的浮点数的函数。我对任何解决方案持开放态度,使用 awk 或任何公平的方法。一个例子将说明我的意思:
hypothenuse () {
local a=${1}
local b=${2}
echo "This is a ${a} and b ${b}"
local x=`echo "scale=8; $a^2" | bc -l`
local y=`echo "scale=8; $b^2" | bc -l`
echo "This is x ${x} and y ${y}"
# local sum=`awk -v k=$x -v k=$y 'BEGIN {print (k + l)}'`
# echo "This is sum ${sum}"
local c=`echo "scale=8; sqrt($a^2 + $b^2)" | bc -l`
echo "This is c ${c}"
}
Run Code Online (Sandbox Code Playgroud)
有时,a
并且b …
我在终端中运行此命令:
grep "bla bla blah" blah* | echo "Blah: $(wc -l) / $(ls | wc -l) * 100"
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
Blah: 44 / 89 * 100
Run Code Online (Sandbox Code Playgroud)
我期望看到什么:
49.4
Run Code Online (Sandbox Code Playgroud)
有没有办法仅使用 bash 命令来获得所需的输出?我不喜欢我计划通过管道输出的脚本。
由于使用 bc 的以下命令不适用于科学计数法中的数字,因此我想知道是否有替代方案,例如使用 awk?
sum=$( IFS="+"; bc <<< "${arrValues[*]}" )
Run Code Online (Sandbox Code Playgroud) 我有一个表达式,"5+50*3/20 + (19*2)/7"
我需要将它四舍五入到小数点后 3 位。答案是17.92857142857143
。当我使用下面的脚本时,它给了我17.928
. 答案应该是17.929
。
read exp
echo "scale=3; $exp" |bc -l
Run Code Online (Sandbox Code Playgroud)
还有一个问题是如何使用printf
来完成相同的任务
以下代码计算 n 次试验中 k 次成功事件的二项式概率:
n=144
prob=$(echo "0.0139" | bc)
echo -e "Enter no.:"
read passedno
k=$passedno
nCk2() {
num=1
den=1
for((i = 1; i <= $2; ++i)); do
((num *= $1 + 1 - i)) && ((den *= i))
done
echo $((num / den))
}
binomcoef=$(nCk2 $n $k)
binprobab=$(echo "scale=8; $binomcoef*($prob^$k)*((1-$prob)^($n-$k))" | bc)
echo $binprobab
Run Code Online (Sandbox Code Playgroud)
当 $passedno (=k) 输入“5”时,结果显示为 0(而不是“0.03566482”),而输入“4”时,结果显示为“.07261898”。
如何以 8 位十进制数字的给定精度打印输出,而不获取输出的四舍五入值?
当我使用 bc 在 shell 中执行浮点运算时,如果我使用常规计算器,结果就不一样了。难道我做错了什么?
例如,我需要找到一个球体的体积。用户输入半径值。
pi = 3.14
volume=$(echo "scale = 2; (4 / 3) * $pi * ($r ^ 3)" | bc)
echo "Volume is $volume"
Run Code Online (Sandbox Code Playgroud)
如果radius = 3,unix 返回112.59,计算器返回113.1。
我有一个变量集,其中的数字用空格分隔,其中第一个数字也可以由空格引导,例如:
VAR=" 2 1 34 3 2 "
Run Code Online (Sandbox Code Playgroud)
我需要将所有这些数字相加。最简单的方法是将数字之间的所有空格替换为+
bc 上的管道
我可以用 for 循环、粘贴和 bc 来完成,但也许有人知道更简单的方法?也许直接在 bash 中VAR
使用 bash 内置字符串替换进行一些计算?
$ for i in $VAR;do echo $i;done|paste -sd+|bc
42
Run Code Online (Sandbox Code Playgroud)
更新:感谢所有建议,我终于找到了带有数组的相当短的方法:
$ VAR=" 2 1 34 3 2 "
$ arr=( $VAR );echo "$((${arr[@]/%/+}0))"
42
$ VAR="$VAR -14"
$ arr=( $VAR );echo "$((${arr[@]/%/+}0))"
28
$
Run Code Online (Sandbox Code Playgroud) bc ×10
arithmetic ×4
bash ×4
shell-script ×3
awk ×2
variable ×2
array ×1
calculator ×1
command-line ×1
conversion ×1
math ×1
numeric-data ×1
shell ×1