我想在我的脚本中执行以下操作:
1 - ((m - 20) / 34)
Run Code Online (Sandbox Code Playgroud)
我想将此操作的结果分配给另一个变量.我希望我的脚本使用浮点数学.例如,对于m = 34:
results = 1 - ((34 - 20) / 34) == 0.588
Run Code Online (Sandbox Code Playgroud)
Joh*_*ica 53
你可以使用bc计算器.如果你将increease设置scale为默认值0 ,它将使用小数(不是二进制浮点)进行任意精度数学运算:
$ m=34
$ bc <<< "scale = 10; 1 - (($m - 20) / 34)"
.5882352942
Run Code Online (Sandbox Code Playgroud)
该-l选项将加载标准数学库并将比例默认为20:
$ bc -l <<< "1 - (($m - 20) / 34)"
.58823529411764705883
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用printf格式化输出,如果您选择:
printf "%.3f\n" "$(bc -l ...)"
Run Code Online (Sandbox Code Playgroud)
jor*_*anm 26
Bash不做浮点数学运算.您可以使用awk或bc来处理此问题.这是一个awk例子:
$ m=34; awk -v m=$m 'BEGIN { print 1 - ((m - 20) / 34) }'
0.588235
Run Code Online (Sandbox Code Playgroud)
要将输出分配给变量:
var=$(awk -v m=$m 'BEGIN { print 1 - ((m - 20) / 34) }')
Run Code Online (Sandbox Code Playgroud)
Cyr*_*rus 19
教bash例如带浮点结果的整数除法:
#!/bin/bash
div () # Arguments: dividend and divisor
{
if [ $2 -eq 0 ]; then echo division by 0; exit; fi
local p=12 # precision
local c=${c:-0} # precision counter
local d=. # decimal separator
local r=$(($1/$2)); echo -n $r # result of division
local m=$(($r*$2))
[ $c -eq 0 ] && [ $m -ne $1 ] && echo -n $d
[ $1 -eq $m ] || [ $c -eq $p ] && return
local e=$(($1-$m))
let c=c+1
div $(($e*10)) $2
}
result=$(div 1080 633) # write to variable
echo $result
result=$(div 7 34)
echo $result
result=$(div 8 32)
echo $result
result=$(div 246891510 2)
echo $result
result=$(div 5000000 177)
echo $result
Run Code Online (Sandbox Code Playgroud)
输出:
1.706161137440
0.205882352941
0.25
123445755
28248.587570621468
Run Code Online (Sandbox Code Playgroud)
小智 9
echo $a/$b|bc -l
Run Code Online (Sandbox Code Playgroud)
给出结果.
例:
read a b
echo $a/$b|bc -l
Run Code Online (Sandbox Code Playgroud)
输入&b值为10 3,得到3.3333333333
如果要将值存储在另一个变量中,请使用该代码
read a b
c=`echo $a/$b|bc -l`
echo $c
Run Code Online (Sandbox Code Playgroud)
它也给出了与上面相同的结果.试试吧...