免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: oxangen
打印 上一主题 下一主题

在bash中比较两数大小,有何大招 [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
21 [报告]
发表于 2011-11-21 16:28 |只看该作者
回复  cjaizss


会这样回帖就是...没试过....

$a="3"
${a%%.*}
${a##*.}
两者都是3
结果3 比3. ...
jason680 发表于 2011-11-21 16:21



    老大,怎么可能简单两句代码就把这个解决了.
   写段伪码
i
j
if i有小数点
ia 小数点之前
ib 小数点之后
else
ia i
ib 0
fi

if j有小数点
ja 小数点之前
jb 小数点之后
else
ja i
jb 0
fi
if ia > ib
   return 1
fi
if ia < ib
   return 0
fi
....
比较小数部分

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
22 [报告]
发表于 2011-11-21 16:33 |只看该作者
老大,怎么可能简单两句代码就把这个解决了.
   写段伪码
i
j
if i有小数点
ia 小数点之前
...
cjaizss 发表于 2011-11-21 16:28



    而且后面比较小数部分还有些麻烦,我还没有想好该怎么写

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
23 [报告]
发表于 2011-11-21 17:03 |只看该作者
本帖最后由 jason680 于 2011-11-21 17:16 编辑

回复 22# cjaizss


我有想到,还没找到指令...
(平常很少用纯shell,都是用awk居多)
跟长度有关....
整数前面补0(以较长的为主)
小数后面补0(以较长的为主)---(可以不用补,直接比)
用字符串比大小就可以了...

论坛徽章:
0
24 [报告]
发表于 2011-11-21 20:44 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
25 [报告]
发表于 2011-11-21 23:29 |只看该作者
回复 24# oxangen


$ cat float.sh

N(){
  xi=${1%.*}
  xf=${1#*.}
  yi=${2%.*}
  yf=${2#*.}
  [ "$1" == "$xf" ] && xf=""
  [ "$2" == "$yf" ] && yf=""

  len=$((${#xi} - ${#yi}))
  while [ "$len" -ne 0 ]; do
    if [ "$len" -gt 0 ]; then
      len=$((len-1))
      yi="0${yi}"
    else
      len=$((len+1))
      xi="0${xi}"
    fi
  done

  len=$((${#xf} - ${#yf}))
  while [ $len -ne 0 ]; do
    if [ $len -gt 0 ]; then
      len=$((len-1))
      yf="${yf}0"
    else
      len=$((len+1))
      xf="${xf}0"
    fi
  done
  
  if [ "$xi" == "$yi" ]; then
    if [ "$xf" == "$yf" ]; then
       echo $1 equal to $2
    elif [ "$xf" \> "$yf" ]; then
       echo $1 great than $2
    else
       echo $1 less than $2
    fi
  elif [ "$xi" \> "$yi" ]; then
     echo $1 great than $2
  else
     echo $1 less than $2
  fi
}

n1="1234567890.123456789000"
n2="01234567890.12345678900"
n3="1234567890.123456789012"
n4="1234567890.1234567890"

n9=".123"

N $n1 $n2
N $n3 $n4
N $n9 "3"

$ bash float.sh
1234567890.123456789000 equal to 01234567890.12345678900
1234567890.123456789012 great than 1234567890.1234567890
.123 less than 3

论坛徽章:
0
26 [报告]
发表于 2011-11-22 15:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP