为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

LEATH 2019-06-24 16:55:59
如何比较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-格式”。:(任何帮助,提示都欢迎!
查看完整描述

3 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

Bash只处理整数数学,但可以使用bc命令如下:


$ num1=3.17648E-22

$ num2=1.5

$ echo $num1'>'$num2 | bc -l

0

$ echo $num2'>'$num1 | bc -l

1

请注意,指数符号必须大写。


查看完整回答
反对 回复 2019-06-24
?
POPMUISE

TA贡献1765条经验 获得超5个赞

最好用awk用于非整数数学。您可以使用这个bash实用程序函数:

numCompare() {
   awk -v n1="$1" -v n2="$2" 'BEGIN {printf "%s " (n1<n2?"<":">=") " %s\n", n1, n2}'}

并称之为:

numCompare 5.65 3.14e-225.65 >= 3.14e-22numCompare 5.65e-23 3.14e-225.65e-23 < 3.14e-22numCompare 3.145678 3.1456793.145678 < 3.145679


查看完整回答
反对 回复 2019-06-24
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

更方便

使用Bash的数字上下文可以更方便地完成这一任务:

if (( $(echo "$num1 > $num2" |bc -l) )); then
  …fi

解释

通过基本计算器命令bc返回1或0。

选择-l等于--mathlib它加载标准的数学库。

将整个表达式括在双括号之间(( ))将这些值分别转换为true或false。

请确保bc安装了基本计算器包。

这同样适用于科学格式的浮标,提供了大写字母。E被雇用,例如num1=3.44E6


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 587 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信