)
我需要做一些基本的数学(720/304) * 360
但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 $((720*360/304))
852
然后它不需要临时的非整数结果(这些结果在您的顺序中int(720/304) = 2, 2 * 360 = 720
尝试这样做:
echo 'scale=2; 720/304 * 360' | bc
这里需要scale
,就像我一样。最好使用单引号来避免可能的外壳扩展。
使用 bash,您也可以执行此操作(此处字符串):
bc <<< 'scale=2; 720/304 * 360'
或使用此处文档:
bc<<'EOF'
scale=2; 720/304 * 360
EOF
如果你想
有一定的精度,你应该用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 "%.2fn", 720/304*360}'
852.63