2015-01-21 150 views
1

我試圖在Linux中實現這一銷售浮點比較

,我面臨
set a=1.2345 
set b=2.34 

if (abs(a-b)>1.2) then 
... 
endif 

有幾個問題:

  • 浮點處理
  • 比較(使用$ vs不使用它)
  • 計算絕對值

我無法一次解決我的問題並處理所有問題。我搜索了很多頁面,有些解決方案對我不起作用。例如,我似乎沒有abs功能。

任何幫助將不勝感激。

+1

你爲什麼認爲你應該有一個'abs'函數?你爲什麼認爲'abs(a-b)'會用這個說法來調用它?你爲什麼認爲'set a = 1.2345'設置了bash變量'$ a'?你爲什麼認爲'endif'結束了'if'語句?你爲什麼認爲bash支持浮點數?你是否正在嘗試編寫'(t)csh'代碼? – 2015-01-21 02:47:55

回答

2

bash不做浮點。標準實用程序bc確實如此。它使用bc來執行你問測試:

a=1.2345 
b=2.34 

r=$(echo "($a - $b)^2 > 1.2^2" | bc) 
if [ "$r" -eq 1 ] 
then 
     echo True 
else 
     echo False 
fi 

由於bc不具有abs功能,上面的代碼使用平方不平等的每一側的簡單的變通。 bc返回1如果測試爲真或0如果爲false。該輸出保存在變量r中。測試r的值是否等於1[ "$r" -eq 1 ]if聲明相應地作出響應。