1

Я столкнулся с ошибкой, вероятно, ошибка в bc Я сталкивался с этим при попытке сравнить два числа на скрипте в bash. Оказывается, когда я делаю:

echo "1.1E-2<1.1E-1" | bc -l

Возвращает 1 (как и ожидалось).

Но когда я делаю это для примера:

echo "2.1E-2<1.1E-1" | bc -l

Он возвращает 0, когда должен возвращать 1 (потому что 0.021 меньше, чем 0.11).

Я использую версию 1.06.95 до н.э. с Kubuntu 14.04

Кто-нибудь нашел подобный результат? Кто-нибудь может придумать обходной путь?

2 ответа2

3

bc не понимает экспоненциальную запись.

Вероятно, он интерпретирует "E" как шестнадцатеричную цифру, но в более длинных числах он, кажется, переводит ее в 9 (ошибка?), И аналогично для других шестнадцатеричных цифр:

bc -l <<< E-4    # 14 - 4
10

bc -l <<< 1E-1   # 19 - 1
18

bc -l <<< F.4E2
9.492
1

Ваш обходной путь

    echo "2.1*10^-2<1.1*10^-1" | bc -l

Если вы хотите преобразовать вывод другого файла, вы можете сделать что-то похожее на

    echo "2.1E-2<1.1E-1" | sed 's/E/*10^/g'  | bc -l 

где с помощью sed вы идете заменить E на *10^ что принимается bc

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