bc
обрабатывает числа как целые числа:
# echo "100/3" | bc
33
bc -l
обрабатывает числа как объекты с плавающей запятой:
# echo "100/3" | bc -l
33.33333333333333333333
Существует ли способ ограничения количества цифр после десятичная точка?
Вы также можете использовать команду printf для округления результата до 3 десятичных знаков
# printf "%.3f\n" $(echo "100/3" | bc -l)
3.333
scale
работает только для разделения; если некоторые умники нуждаются в этом в умножении, то вы можете добиться этого, используя манипуляции со строками. Скажите, если вам нужно умножить 32 * 0.60
, ответ - 19.20
. Если вам нужно получить ответ 19 в одиночку, вы можете получить его разными способами.
Использование строковой манипуляции
$ S=$(echo "32*.60" | bc ) ; echo ${S%.*}
19
Синтаксис строковой манипуляции: ${Variable%pattern}
, это удалит образец короткого соответствия, который следует после %
. Для получения дополнительной информации о работе со строками см. Руководство по расширенному написанию сценариев .
Используя Scale
как указано в **chronitis**
$ echo "scale=0; 32*60/100" | bc
19
Чтобы избавиться от конечных нулей, вместо манипуляции со строками, можно также сделать деление на 1.
$ echo "0.232 * 1000" | bc
232.000
$ echo "0.232 * 1000 / 1" | bc
232
В дополнение к предыдущим ответам
echo "scale=2; 1.0150876" | bc
Возвращает
1.0150876
Добавьте математические операции, чтобы получить только 2 десятичных числа - (NUMBER * 100) / 100
echo "scale=2; (1.0150876 * 100) / 100" | bc
Теперь возвращает
1.01
Установите специальную переменную scale
:
$ echo "scale=2; 100/3" | bc
33.33
Округление
scale = 2 усекает ответ до двух десятичных цифр, но мы можем добиться округления следующим образом:
$ echo "a=12/104; scale=2; (a+0.005)/1" | bc -l
.12