5

Я только начинаю с Bc Гну, и я застрял в самом начале (очень обескураживающий ...). Я хочу разделить два числа и получить результат с плавающей точкой:

$bc
bc 1.06.94
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

15/12
1
15.0/12.0
1
15.000000/12.000000
1
scale(15.00000)
5

На странице руководства сказано, что разделение возвращает число с той же шкалой, что и начальные значения. Очевидно, это либо неправда, либо я что-то упустил.

Поиск в Google не привел к новому пониманию (кроме того, что «БК» может также обозначать «Британская Колумбия»).

Вы видите мою ошибку? А еще лучше, вы знаете какие-нибудь хорошие ссылки / учебные пособия по BC?

4 ответа4

8

Вы можете установить масштаб с помощью

scale=2

Тогда деление работает как положено:

scale=2
15/12
1.25

Цитировать из Википедии:

Все числа и содержимое переменных являются числами произвольной точности, точность которых (в десятичных разрядах) определяется переменной глобального scale .

7

Используйте bc -l, который предварительно загружает математическую библиотеку, и по умолчанию установлен масштаб 20.

$ bc -l
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
4/3
1.33333333333333333333
1

Чтобы развернуть Colin_Daly, используйте BC_ENV_ARGS="-q $HOME/.bcrc" , с scale=INT в .bcrc, очевидно. Переменная окружения в основном просто застряла сразу после команды bc.

Что происходит, так это то, что -q - это обычная опция командной строки, а $HOME/.bcrc раскрывается и передается в bc в качестве первого аргумента file (может быть несколько аргументов файла). scale=INT - это строка bc, которая является языком программирования. Функционально это эквивалентно запуску bc и вводу scale=INT в приглашении bc. Вы должны использовать $ HOME, а не ~, потому что ~ распознается только тогда, когда он не заключен в кавычки (см. Здесь), но нам нужно что-то вроде кавычек, чтобы переменная была установлена для обоих слов, а не только до пробела.

1

В случае, если это кому-нибудь поможет, я пытался установить scale=2 и тихий режим, установленные по умолчанию, и я не мог сделать это правильно.

Если я установлю BC_ENV_VARS="-q" , я получу тихий режим, и если я установлю BC_ENV_VARS="~/.bcrc" , я смогу установить scale=2 в этом файле, но я не смог включить тихий режим (возможно, есть кстати, но я не смог его найти).

В конце я использовал экспорт BC_ENV_ARGS=~/.bcrcscale=2) и связал bc с bc -q .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .