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

37

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

# echo "100/3" | bc
33

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

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

Есть ли способ ограничить количество цифр после десятичной точки?

    
задан Adam Matan 15.11.2012 в 13:35
источник

3 ответа

49

Задайте специальную переменную scale :

$ echo "scale=2; 100/3" | bc
33.33
    
ответ дан chronitis 15.11.2012 в 13:53
источник
6

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

  1. Использование String Manipulation

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

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

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

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

    $ echo "0.232 * 1000" | bc
    232.000
    
    $ echo "0.232 * 1000 / 1" | bc
    232
    
ответ дан SAGAR BHOOSHAN 06.04.2016 в 12:15
3

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

echo "scale=2; 1.0150876" | bc

Возвращает

1.0150876

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

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

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

1.01
    
ответ дан Michal Zmuda 23.12.2016 в 07:21