bc
обрабатывает числа как целые числа:
# echo "100/3" | bc
33
bc -l
обрабатывает числа как объекты с плавающей запятой:
# echo "100/3" | bc -l
33.33333333333333333333
Есть ли способ ограничить количество цифр после десятичной точки?
command-line
bc
Адам Матан
источник
источник
scale=0;1234*1.1
, вы должны написать, какscale=0;1234*1.1/1
получить1357
. В противном случае, независимо от значенияscale
, вы получите1357.4
.1234*1.0
даст вам1234.0
Ответы:
Установите
scale
специальную переменную:источник
$ echo "scale=2; (100/180)*180" | bc
дает 99.00 :(.5
.~$ echo "scale=2; 12/104" | bc
.11
Если округлить это было бы.12
. Тем не менее, он все равно должен выполнить работу для моей задачи.echo "result = (100/180) * 180; scale=2; result / 1" | bc -l
. Теперь вы получаете99.99
.scale
работает только на разделение; если некоторые умники нуждаются в этом в умножении, то вы можете добиться этого, используя манипуляции со строками. Скажите, если вам нужно умножить32 * 0.60
, ответ19.20
. Если вам нужно получить ответ 19 в одиночку, вы можете получить его разными способами.Использование строковой манипуляции
Синтаксис манипуляции с строками:
${Variable%pattern}
это удалит образец короткого соответствия, который следует после%
. Для получения дополнительной информации о работе со строками см. Руководство по расширенному написанию сценариев .Использование
Scale
как указано**chronitis**
Чтобы избавиться от конечных 0, вместо манипуляции со строками можно также делить на 1.
источник
В дополнение к предыдущим ответам
Возвращает
Добавьте математические операции, чтобы получить только 2 десятичных числа - (NUMBER * 100) / 100
Теперь возвращается
источник
Вы также можете использовать команду printf для округления результата до 3 десятичных знаков
источник
Округлять
scale = 2 усекает ответ до двух десятичных цифр, но мы можем добиться округления следующим образом:
источник