Как распечатать первые три цифры после десятичной точки плавающего числа?

Я плохо знаком с Bash и узнал, что и printf и эхо пишут в стандартный вывод. Но, я проник через следующий пример, который читает выражение из входа и вычисляет результат с точностью 3 десятичных разрядов:

read exp
printf "%.3f\n" "$(echo $exp | bc -l)"

Я не добираюсь, почему эхо передается сюда как аргумент в printf оператор. Есть ли любой другой способ представить оператор с помощью только echo?

4
задан 29 October 2014 в 16:14

2 ответа

После read exp, можно использовать echo следующим образом:

$ echo "scale=3; $exp/1" | bc
9.456

, Но примечание, которого эта команда не требует echo:

$ bc <<< "scale=3; $exp/1"
9.456

РЕДАКТИРОВАНИЕ : для получения округленного результата, который необходимо использовать printf, удар, встроенный как bc, не может круглые значения.

следующая команда работает как ожидалось:

 echo "scale=4; $exp" | bc | xargs printf "%.3f\n"
3
ответ дан 17 November 2019 в 14:28

Вот решение с помощью [только 112]:

  • , если Вы используете десятичную точку (.) в Вашем рациональном числе:

    $ read exp
    123.4567
    $ int=${exp%%.*}
    $ rat=${exp##*.}
    $ echo $int.${rat:0:3}
    123.456
    
  • , если Вы используете десятичную запятую (,) в своем рациональном числе (поскольку я использую и большая часть части континентальной Европы):

    $ read exp
    123,4567
    $ int=${exp%%,*}
    $ rat=${exp##*,}
    $ echo $int,${rat:0:3}
    123,456
    

Для большего количества информации см. Усовершенствованное Руководство по созданию сценариев Bash: Управление Строками .

2
ответ дан 17 November 2019 в 14:28

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

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