我需要做一些基本的數學(720/304) * 360
Bash:如何計算?
但bash的行爲很奇怪:
echo "720/304 * 360" | bc
720
echo "(720/304) * 360" | bc
720
echo $(((720/304) * 360))
720
我需要做一些基本的數學(720/304) * 360
Bash:如何計算?
但bash的行爲很奇怪:
echo "720/304 * 360" | bc
720
echo "(720/304) * 360" | bc
720
echo $(((720/304) * 360))
720
使用bc -l
讓每個操作的非整數結果。
echo "720/304 * 360" | bc -l
在bash
,或者更短:
bc -l <<< '720/304*360'
嘗試這樣做:
echo 'scale=2; 720/304 * 360' | bc
這裏所需要的scale
,就像我一樣。並更好地使用單引號以避免可能的shell擴展。
隨着bash,你也可以這樣做(下面的字符串):
bc <<< 'scale=2; 720/304 * 360'
或者使用這裏文檔:
bc<<'EOF'
scale=2; 720/304 * 360
EOF
爲什麼BC不會把數字整數? 'echo'scale = 2; 720/304 * 360'| bc> 849.60' – Orlo
請參閱http://brskari.wordpress.com/2011/04/23/rounding-values-in-bc/ –
您可以扭轉/和*如果你可以使用一個整數結果:
echo $((720*360/304))
852
然後它不需要臨時的非整數結果(這是你的訂單int(720/304) = 2, 2 * 360 = 720
)
如果你想有一定的精度,你應該用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
慶典只能做整數運算。 –