bc: установить количество цифр после десятичной точки

bc обрабатывает числа как целые числа:

# echo "100/3" | bc
33

bc -l обрабатывает числа как объекты с плавающей запятой:

# echo "100/3" | bc -l
33.33333333333333333333

Существует ли способ ограничения количества цифр после десятичная точка?

53
задан 8 February 2017 в 10:32

5 ответов

Вы также можете использовать команду printf для округления результата до 3 десятичных знаков

# printf "%.3f\n" $(echo "100/3" | bc -l)
3.333
0
ответ дан 8 February 2017 в 10:32

scale работает только для разделения; если некоторые умники нуждаются в этом в умножении, то вы можете добиться этого, используя манипуляции со строками. Скажите, если вам нужно умножить 32 * 0.60, ответ - 19.20. Если вам нужно получить ответ 19 в одиночку, вы можете получить его разными способами.

  1. Использование строковой манипуляции

    $ S=$(echo "32*.60" | bc ) ; echo ${S%.*}
    19
    

    Синтаксис строковой манипуляции: ${Variable%pattern}, это удалит образец короткого соответствия, который следует после %. Для получения дополнительной информации о работе со строками см. Руководство по расширенному написанию сценариев .

  2. Используя Scale как указано в **chronitis**

    $ echo "scale=0; 32*60/100" | bc
    19
    
  3. Чтобы избавиться от конечных нулей, вместо манипуляции со строками, можно также сделать деление на 1.

    $ echo "0.232 * 1000" | bc
    232.000
    
    $ echo "0.232 * 1000 / 1" | bc
    232
    
0
ответ дан 8 February 2017 в 10:32

В дополнение к предыдущим ответам

echo "scale=2; 1.0150876" | bc

Возвращает

1.0150876

Добавьте математические операции, чтобы получить только 2 десятичных числа - (NUMBER * 100) / 100

echo "scale=2; (1.0150876 * 100) / 100" | bc

Теперь возвращает

1.01
0
ответ дан 8 February 2017 в 10:32

Установите специальную переменную scale:

$ echo "scale=2; 100/3" | bc
33.33
0
ответ дан 8 February 2017 в 10:32

Округление

scale = 2 усекает ответ до двух десятичных цифр, но мы можем добиться округления следующим образом:

$ echo "a=12/104; scale=2; (a+0.005)/1" | bc -l
.12
0
ответ дан 8 February 2017 в 10:32

Другие вопросы по тегам:

Похожие вопросы: