Итак, это проблема хакерранка (https://www.hackerrank.com/challenges/bash-tutorials---arithmetic-operations). В принципе, ввод - это арифметическое выражение, и я должен распечатать отформатированный ответ (3 десятичных знака). Я попробовал это сначалаРазница между отношением округления printf% .3f и bc
read exp
echo "scale = 3; $exp" | bc -l
Прошло несколько испытаний, но не первое.
5+50*3/20 + (19*2)/7
Ответ 17.929
, но мой код распечатывает 17.928
. Я попробовал этот код вместо
read exp
printf "%.3f\n" `echo $exp | bc -l`
Примечания: эхо часть должна быть в обратных кавычках, но я ставлю «», чтобы не путать с блочными кавычками. Все тесты прошли. Так в чем разница?
Backticks подходят только для форматирования кода меньше, чем для строк. Для многострочных сегментов используйте отступы для форматирования кода (это то, что редактор javascript сделает для вас, если вы нажмете кнопку кода). –
... поочередно используйте '$ (...)' вместо '\' ... \ '' так или иначе - это современный синтаксис POSIX и менее запутанный для гнезда. –
.... также - 'echo '$ exp" | bc -l', а не 'echo $ exp | bc -l'; если ваше выражение содержало пробелы вокруг '*', у вас было бы очень удивительное поведение без кавычек (и даже без пробелов у вас было бы удивительное поведение, если бы в вашей оболочке была опция «nullglob»). –