Re: [问题] shell浮点数运算问题

楼主: zchien (小建)   2018-12-07 00:05:03
※ 引述《zchien (小建)》之铭言:
: 我用unix 系统
: 写sh时,遇到了一个bug ,就是浮点数无法运算
: 我使用ntpdate去校正时间, 并且记录校正了多少时间
: 例如:需要校正的时间是 0.000304 s
: 我写
: ntpdate -p 10.37.82.23 > time.txt
: NTP= grep delay time.txt | awk ' ' {print $6}
: # $NTP will show 类似 0.000304
: if [ $NTP -le 0.100001 ];then
: ntpdate -u 10.37.82.23
: fi
: # 如果NTP server 连线异常, $NTP will show 0.000000
: if [ $NTP -eq 0.000000 ];then
: echo "NTP server not connect"
: fi
: 上面第一个if 会 不成立 , 可能类似浮点数运算, 他以为两个都是0
: 第二个if 也会显示错误, [0.000000 -eq 0.000000 ] 他竟然显示不相等
: 请问这是什么原因,我可以怎么修正
我找到bc的用法了,但是会有问题
http://0rz.tw/FlVdf
ntpdate -q 10.37.82.23 > time.txt
# $NTP will show 类似 0.000304
NTP=$(grep delay time.txt | awk '{print $6}')
if [ `echo "$NTP"|bc` -ge `echo 0.100001 |bc` ] ; then
echo "NTP > 0.100001"
if
我使用sh -vx script 去看它显示状态
这会显示
+[ 0.000304 -ge 0.100001 ]
+echo NTP > 0.100001
echo NTP > 0.100001
而且-ge 不论改成 -eq , -le 都是一样的结果
请问这是什么原因
用awk 也不行
作者: kdjf (我抓得到什么呢?)   2018-12-07 00:16:00
你参考的文有给BC指令阿,但是你的script不知道在干嘛上一篇有强者把可以动的程式给你了,先研究一下吧
楼主: zchien (小建)   2018-12-07 00:38:00
强者的可用,很感谢,。我只是好奇,shell要如何用小数点以下的数值,做运算,有人说bc可用,但我好像遇到系统bug不论怎么计算,都 比不出大小
作者: OSDBNetwork (路人甲)   2018-12-07 06:35:00
作者: HamalAri (哈马‧阿里)   2018-12-07 09:06:00
前面不是也有人推文告诉你 bash 只支援整数吗?
作者: da21510 (da21510)   2018-12-07 14:45:00
应该是你用错之前还用bc写算法作业完全没问题= =
作者: kdjf (我抓得到什么呢?)   2018-12-07 22:02:00
所以你没读懂人家script在干嘛阿.. shell只能用整数,就用bc把小数点移走
楼主: zchien (小建)   2018-12-10 22:06:00
我用Solaris 10系统会有错误,它认不得 | bc的写法
作者: kdjf (我抓得到什么呢?)   2018-12-12 10:24:00
等等,你知道|是pipeline了吗?
楼主: zchien (小建)   2018-12-14 23:11:00
K大,我知道pipeline
作者: superpandal   2018-12-15 18:11:00
XD
作者: LinBuoRen (林博仁)   2018-12-18 18:43:00
你知道不同的 shell 有不同的脚本语言吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com