在bash中我需要比较两个浮点数,一个我在脚本中定义,另一个读作参数,为此我做了:
if [[ $aff -gt 0 ]]
then
a=b
echo "xxx "$aff
#echo $CX $CY $CZ $aff
fi
但是我收到了错误:
[[:-309.585300:语法错误:算术运算符无效(错误标记为“.585300”)
有什么问题?
由于
答案 0 :(得分:7)
使用bc而不是awk:
float1='0.43255'
float2='0.801222'
if [[ $(echo "if (${float1} > ${float2}) 1 else 0" | bc) -eq 1 ]]; then
echo "${float1} > ${float2}"
else
echo "${float1} <= ${float2}"
fi
答案 1 :(得分:4)
使用awk
#!/bin/bash
num1=0.3
num2=0.2
if [ -n "$num1" -a -n "$num2" ];then
result=$(awk -vn1="$num1" -vn2="$num2" 'BEGIN{print (n1>n2)?1:0 }')
echo $result
if [ "$result" -eq 1 ];then
echo "$num1 greater than $num2"
fi
fi
答案 2 :(得分:3)
test
(通常链接为[
)和bash
- 内置等价物仅支持整数。
答案 3 :(得分:2)
使用bc检查数学
a="1.21231"
b="2.22454"
c=$(echo "$a < $b" | bc)
if [ $c = '1' ]; then
echo 'a is smaller than b'
else
echo 'a is larger than b'
fi
答案 4 :(得分:0)
我会使用awk:
e=2.718281828459045
pi=3.141592653589793
if [ "yes" = "$(echo | awk "($e <= $pi) { print \"yes\"; }")" ]; then
echo "lessthanorequal"
else
echo "larger"
fi
答案 5 :(得分:0)
最简单的解决方案是:
f1=0.45
f2=0.33
if [[ $f1 > $f2 ]] ; then echo "f1 is greater then f2"; fi
(在OSX上)输出:
f1 is greater then f2
这是另一个结合浮点和整数运算的例子(你需要可以从here下载的极好的perl脚本calc.pl):
dateDiff=1.9864
nObs=3
i=1
while [[ $dateDiff > 0 ]] && [ $i -le $nObs ]
do
echo "$dateDiff > 0"
dateDiff=`calc.pl $dateDiff-0.224`
i=$((i+1))
done
哪个输出
1.9864 > 0
1.7624 > 0
1.5384 > 0