首页 > 解决方案 > 带函数的浮点运算

问题描述

这些函数的作用是卷曲一个 json 文件并对其进行解析,其输出是一个数字。

function func() {
curl -Ss -H 'Cache-Control: no-cache' url.com/A?limit=2 | jq -r '. 
[] | .[] | .blah'
}
function func2() {
curl -Ss -H 'Cache-Control: no-cache' url.com/B2?limit=2 | jq -r '. 
[] | .[] | .blah'
}
function func3() {
curl -Ss -H 'Cache-Control: no-cache' url.com/C3?limit=2 | jq -r '. 
[] | .[] | .blah'
} 

function example() { 
"(($(func) * $(func2) * $(func3)))" | bc -l
}
#result is it echoing the numbers, but not actually doing the math.
#echoing .072*.027 in bc, but no math.

所以我要做的是通过 bash 进行浮点运算,这将通过另一个函数来引用。唯一的区别是函数。Bash 不支持通过 bc 解决的浮点运算。

示例函数数字输出:

#func output
0.072854 #A
0.072855 #B
0.072828 #C
0.072827 #D

#func2 output
0.027873 #A
0.027884 #B
0.027848 #C
0.027847 #D

#func3 output
0.383170 #A
0.383215 #B
0.381858 #C
0.381857 #D

它是如何工作的,A * A * A = 输出 1,B * B * B = 输出 2,C * C * C = 输出 3

我试过的:

function blah() {
echo $((func*func2*func3)) | bc -l
}
#result is "0"

echo "$(func) * $(func2) * $(func3)" | bc -l
#result is:
.072965
.072966
.072925
.002030350008
.027856
.027827
.010633768950
.382371
.380995
.380977

标签: bashfunctionmathfloating-pointsh

解决方案


我相信你会希望你的功能是这样的:

echo "$(func) * $(func2) * $(func3)" | bc -l

编辑:由于您有多个输出值,您可以将它们放入数组中,然后遍历它们并乘以这些值:

example() {
  a=($(func1))
  b=($(func2))
  c=($(func3))

  for i in {0..3} # set to number of values returned
    do 
      echo "${a[i]} * ${b[i]} * ${c[i]}" | bc -l
    done
}

根据您的值,输出应为:

.000778087816708140
.000778496988156300
.000774451610799552
.000774411139231933

如果您func的 ' 返回一个值,那么echobc它们一起使用就足够了。


推荐阅读