如何比较Bash中的两个浮点数?

如何比较Bash中的两个浮点数?

我正在努力比较bash脚本中的两个浮点数。我必须要变量。

let num1=3.17648e-22let num2=1.5

现在,我只想对这两个数字做一个简单的比较:

st=`echo "$num1 < $num2" | bc`if [ $st -eq 1]; then
  echo -e "$num1 < $num2"else
  echo -e "$num1 >= $num2"fi

不幸的是,对于数字1的正确处理,我遇到了一些问题,因为数字1可以是“e-格式”。:(

任何帮助,提示都欢迎!


LEATH
浏览 590回答 3
3回答

长风秋雁

Bash只处理整数数学,但可以使用bc命令如下:$ num1=3.17648E-22$ num2=1.5$ echo $num1'>'$num2 | bc -l0$ echo $num2'>'$num1 | bc -l1请注意,指数符号必须大写。

POPMUISE

最好用awk用于非整数数学。您可以使用这个bash实用程序函数:numCompare()&nbsp;{ &nbsp;&nbsp;&nbsp;awk&nbsp;-v&nbsp;n1="$1"&nbsp;-v&nbsp;n2="$2"&nbsp;'BEGIN&nbsp;{printf&nbsp;"%s&nbsp;"&nbsp;(n1<n2?"<":">=")&nbsp;"&nbsp;%s\n",&nbsp;n1,&nbsp;n2}'}并称之为:numCompare&nbsp;5.65&nbsp;3.14e-225.65&nbsp;>=&nbsp;3.14e-22numCompare&nbsp;5.65e-23&nbsp;3.14e-225.65e-23&nbsp;<&nbsp;3.14e-22numCompare&nbsp;3.145678&nbsp;3.1456793.145678&nbsp;<&nbsp;3.145679

芜湖不芜

更方便使用Bash的数字上下文可以更方便地完成这一任务:if&nbsp;((&nbsp;$(echo&nbsp;"$num1&nbsp;>&nbsp;$num2"&nbsp;|bc&nbsp;-l)&nbsp;));&nbsp;then &nbsp;&nbsp;…fi解释通过基本计算器命令bc返回1或0。选择-l等于--mathlib它加载标准的数学库。将整个表达式括在双括号之间(( ))将这些值分别转换为true或false。请确保bc安装了基本计算器包。这同样适用于科学格式的浮标,提供了大写字母。E被雇用,例如num1=3.44E6
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python