2013-01-19 108 views
1

您好我正在特林產生使用以下代碼擊浮點和負值

設NUMBER1 = 0數字2 = flaoting點精度0運算符= +

printf "%0.2f\n" result=$((number1 $operator number2)) 

代碼工作而不printf的但我無法弄清楚如何執行負( - )計算和浮點數?

+0

bash變量是整數。 ksh可以使用'float'別名來聲明浮點數,該別名可以擴展爲'typeset -lE'。更好的方法是使用'awk',因爲它有自然的浮點支持,或者如果你真的必須有'bash',你可以將'calc'放到'bc'中(這是一個外部過程,在典型的循環結構中花費很大) ,但在這裏搜索的例子。如果你花時間閱讀http://stackoverflow.com/faq,你會得到更好的幫助。有關awk的幫助,請閱讀http://www.grymoire.com/Unix/Awk.html。祝你好運。 – shellter

回答

1

擊不支持浮點運算,所以,無論你乘的數字由許多零操作爲小數你想:

# 10.321 - 123.01 
result=$((10321 - 123010)) 
echo ${result:0:-3}.${result:${#result} - 3} 

或者乾脆使用另一種工具來做到這一點,像bc

echo "scale=2; 10.321 - 123.01" | bc 

此外,您使用的語法無效;你應該有:

printf "%0.2f\n" $((number1 $operator number2)) 
+0

感謝您的信息,但結果是需要存儲的interation - 印刷品「%0.2f \ n」$((number1 $ operator number2))不足夠 –

+1

@TrickyDicky:你的問題沒有說明這個要求。解決方案是'res = $(printf「%0.2f \ n」$((n $ o n2)))''。祝你好運 – shellter

0

最後我想通了!

result=$(echo "scale=4; (($number1 $operator $number2))" | bc) 
+1

result = $(echo「scale = 4; $ number1 $ operator $ number2」| bc)< - 不需要括號 - 它們是多餘的,因爲沒有操作順序-MDAS--來覆蓋。 $(())是一個bash構造。 –