2014-01-11 90 views
0

我需要做一些基本的數學(720/304) * 360Bash:如何計算?

但bash的行爲很奇怪:

echo "720/304 * 360" | bc 
720 

echo "(720/304) * 360" | bc 
720 

echo $(((720/304) * 360)) 
720 
+0

慶典只能做整數運算。 –

回答

2

使用bc -l讓每個操作的非整數結果。

echo "720/304 * 360" | bc -l 
在bash

,或者更短:

bc -l <<< '720/304*360' 
2

嘗試這樣做:

echo 'scale=2; 720/304 * 360' | bc 

這裏所需要的scale,就像我一樣。並更好地使用單引號以避免可能的shell擴展

隨着,你也可以這樣做(下面的字符串):

bc <<< 'scale=2; 720/304 * 360' 

或者使用這裏文檔

bc<<'EOF' 
scale=2; 720/304 * 360 
EOF 
+0

爲什麼BC不會把數字整數? 'echo'scale = 2; 720/304 * 360'| bc> 849.60' – Orlo

+0

請參閱http://brskari.wordpress.com/2011/04/23/rounding-values-in-bc/ –

2

您可以扭轉/和*如果你可以使用一個整數結果:

echo $((720*360/304)) 
852 

然後它不需要臨時的非整數結果(這是你的訂單int(720/304) = 2, 2 * 360 = 720

1

如果你想有一定的精度,你應該用awk或者bc做數學運算。但應該小心使用與bc四捨五入。因爲有些操作將使「意外」的結果:例如:

kent$ echo 'scale=2; 720/304 * 360' |bc 
849.60 
kent$ echo 'scale=3; 720/304 * 360' |bc   
852.480 
kent$ echo 'scale=4; 720/304 * 360' |bc 
852.6240 

所以我建議awk

kent$ awk 'BEGIN{printf "%.2f\n", 720/304*360}' 
852.63