Что я могу сделать, чтобы изменить & ldquo; .33 & rdquo; значение в & lt; 0,33 & lt;

Я хочу сравнить значение с 0, и он говорит мне, что он меньше 0. Я использовал

solution=`echo $a / $b | bc -l`

Эта проблема возникает только тогда, когда «a» меньше, чем «b». [ ! d1]

1
задан 1 May 2015 в 12:42

4 ответа

a=1
b=3
printf -v solution "%.2f" $(bc -l <<< "$a / $b")
echo $solution

Вывод:

0.33

Если $ a и $ b всегда целые числа, и вы ищете решение bash для деления двух целых чисел: тогда вам может быть интересно это.

5
ответ дан 23 May 2018 в 20:48

С printf:

$ printf '%f' $(echo $a / $b | bc -l)
0.200000

Если вы хотите только 1 позицию после десятичной точки:

$ printf '%.1f' $(echo $a / $b | bc -l)
0.2
3
ответ дан 23 May 2018 в 20:48

Вы также можете получить начальный ноль, используя perl:

$ echo 1 / 3 | bc -l | perl -ne 'printf"%0.2f\n",$_'
0.33
1
ответ дан 23 May 2018 в 20:48
  • 1
    Извините, я отредактировал неправильный ответ. – A.B. 1 May 2015 в 16:29
  • 2
    @ A.B. Нет проблем, они действительно похожи. – Sylvain Pineau 1 May 2015 в 16:32
  • 3
    Поэтому вы получаете +1 =) – A.B. 1 May 2015 в 16:34

Или вы можете использовать только perl:

$ export a=1 b=3; perl -e 'printf("'%.2f'\n", $ENV{a}/$ENV{b});'
0.33

и для вашего скрипта:

solution=$(export a=1 b=3; perl -e 'printf("'%.2f'\n", $ENV{a}/$ENV{b});')
echo "$solution"
1
ответ дан 23 May 2018 в 20:48
  • 1
    Почему использование bc действительно, +1 – Sylvain Pineau 1 May 2015 в 16:36
  • 2
    Есть лучший способ передать переменные среды, которые действительны только для одной команды: a=1 b=3 perl -e 'printf("%.2f\n", $ENV{a} / $ENV{b})' – 200_success 1 May 2015 в 22:31
  • 3
    (Соответствующая документация Bash довольно загадочна.) – 200_success 1 May 2015 в 22:39

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

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