мне нужно сделать некоторые основные математические (720/304) * 360
Bash: Как рассчитать?
но Баш действует очень странно:
echo "720/304 * 360" | bc
720
echo "(720/304) * 360" | bc
720
echo $(((720/304) * 360))
720
мне нужно сделать некоторые основные математические (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
или, короче в Баше:
bc -l <<< '720/304*360'
Постарайтесь сделать это:
echo 'scale=2; 720/304 * 360' | bc
scale
нужен здесь, как я уже делаю. И лучше использовать одинарные кавычки, чтобы избежать возможного расширение оболочки.
С 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
Баша можно сделать только целочисленную арифметику. –