shell浮點數運算問題 - Linux

Doris avatar
By Doris
at 2018-12-07T00:05

Table of Contents

※ 引述《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 也不行




--
Tags: Linux

All Comments

Hazel avatar
By Hazel
at 2018-12-09T16:53
你參考的文有給BC指令阿,但是你的script不知道在幹嘛
Bethany avatar
By Bethany
at 2018-12-11T14:47
上一篇有強者把可以動的程式給你了,先研究一下吧
Agatha avatar
By Agatha
at 2018-12-13T22:58
強者的可用,很感謝,。我只是好奇,shell要如何用小數點
以下的數值,做運算,有人說bc可用,但我好像遇到系統bug
Doris avatar
By Doris
at 2018-12-15T04:11
不論怎麼計算,都 比不出大小
Ula avatar
By Ula
at 2018-12-18T18:16
參考看看 https://pastebin.com/1rwFQyaf
Emily avatar
By Emily
at 2018-12-21T04:46
前面不是也有人推文告訴你 bash 只支援整數嗎?
Annie avatar
By Annie
at 2018-12-24T10:22
應該是你用錯
之前還用bc寫演算法作業
完全沒問題= =
Ida avatar
By Ida
at 2018-12-28T02:08
所以你沒讀懂人家script在幹嘛阿.. shell只能用整數,就用bc
把小數點移走
Audriana avatar
By Audriana
at 2019-01-01T10:13
我用Solaris 10系統會有錯誤,它認不得 | bc的寫法
Cara avatar
By Cara
at 2019-01-03T22:19
等等,你知道|是pipeline了嗎?
Ina avatar
By Ina
at 2019-01-05T06:33
K大,我知道pipeline
Odelette avatar
By Odelette
at 2019-01-08T16:30
XD
Regina avatar
By Regina
at 2019-01-11T13:26
你知道不同的 shell 有不同的腳本語言嗎?

AMD主機沒辦法成功安裝ubuntu

Barb Cronin avatar
By Barb Cronin
at 2018-12-06T23:05
小弟我最近組一臺主機,打算用Windows 10 andamp; Linux 雙系統,Windows是順利安裝上去了, 1.我的電腦配置,外加GTX750ti顯卡,主板驅動已安裝 http://i.imgur.com/3mWiRv1.jpg 2.目前試過Ubuntu 16.04.5 andamp; 18. ...

python 虛擬環境 排程問題

Zenobia avatar
By Zenobia
at 2018-12-05T00:01
各位大大晚安 目前有一支python程式需要設定排程處理 但需要先進入 conda 的虛擬環境下才能執行(因為套件灌在虛擬環境下) 能不能直接使用 linux 的 at 指令完成? 麻煩各位大大解惑了,謝謝!! - ...

shell浮點數運算問題

Hedda avatar
By Hedda
at 2018-12-04T23:26
忍不住回一下... ※ 引述《zchien (小建)》之銘言: : 我用unix 系統 UNIX的商標權由國際開放標準組織所擁有 只有符合單一UNIX規範的UNIX系統才能使用UNIX這個名稱 否則只能稱為類UNIX(UNIX-like)。 既然你來到這個版, 我猜你是用 Linux, 就直接說用 Li ...

設定4g 網卡

Jacky avatar
By Jacky
at 2018-12-04T14:21
hi all, how to configure (switch ) the network interface to ppp link. i have been install and setup ppp config. usb-modeswitch usb-modeswitch-data , ppp ...

shell浮點數運算問題

Margaret avatar
By Margaret
at 2018-12-03T22:44
我用unix 系統 寫sh時,遇到了一個bug ,就是浮點數無法運算 我使用ntpdate去校正時間, 並且記錄校正了多少時間 例如:需要校正的時間是 0.000304 s 我寫 ntpdate -p 10.37.82.23 andgt; time.txt NTP= grep delay time. ...