2016-05-24 10 views
0

式を評価するためにbcとscaleを使用していますが、切り捨てる代わりに切り上げたいとします。これを行う最も簡単な方法は何ですか?スケールまたはprintfで切り捨てる代わりにbcスケールを切り上げます

$ read exp 
5+50*3/20 + (19*2)/7 
$ echo "scale=3; $exp" | bc -l 
17.928 

私の希望の答えは17.929

あるしかし、私は答えは何か別の地面よりも私の答えに補遺ことを好みます。私は終わりがないゼロの答えとして17.929をしたいしかし

$ echo "scale=4; ($exp+0.0005)" | bc -l 
17.9290 
$ echo "scale=3; ($exp+0.0005)" | bc -l 
17.9285 

:ありがとう

ここでは、私が試した事のいくつかです。

+0

をdimo414 @私は関数を記述する必要はありません。私はこれを書く前にそれを見た –

+0

あなたがしたくない場合は、関数を書く必要はありません。 'printf'へのパイプへの答えは、関数がするものです。 – dimo414

+0

@MonaJalal:関数を書いて(またはコピーして)bashスタートアップファイルに入れると、あなたを待っています。さもなければ、あなたは正しい*丸められた答えがほしいと思うたびに、* something *とタイプしなければならなくなります。真剣に、bash関数を使う。あなたが好きなら 'bc'と呼んでください。 – rici

答えて

0

4として、3としてbcのをprintfのを使用して式に0.0005を追加することによってそれを解決:

printf "%.3f\n" $(echo "scale=4; $exp+0.0005" | bc -l) 
+2

'0.0005'を追加する必要はありません、' printf'は正しく丸めます。実際には 'scale'ステップを完全にスキップすることができます。これも同様に動作します:' printf "%.3f \ n" $(bc -l <​​<< "$ exp") ' –

+0

@ BenjaminW。それはうまくいった。ありがとう。なぜ<<<ここを使ったのですか? https://www.hackerrank.com/challenges/bash-tutorials-- arithmetic-operationsも答えとして書くことができますか?ありがとう! –

+0

@MonaJalal: '<<<はそれに続くものが[" here-string "](http://www.gnu.org/software/bash/manual/bash.html#Here-Strings)であることを示します。標準入力でユーティリティーに提供され、改行が続きます。 '' foo <<<いくつかの入力 ""と "echo"いくつかの入力 "| foo"は本質的に同じですが、パイプを使用しないことにはいくつかの利点があります。また、一度それを知ると、より短くて読みやすくなります。 – rici

関連する問題