Ubuntu bashでは、小数点以下の桁数を014.04.1 LTS 64-bit
に設定し、小数点の左側の0を削除することはできません。にどのようにbc
切り替えることができますか?これは私のファイル命名規則のために必要です。ご提案いただきありがとうございます。0.005000000
.005
更新:すでに定義されているシェル変数でこれを使用して再定義できますか?以下のコードではエラーが発生します。
~/Desktop/MEEP$ printf "%.3f\n" $w
bash: printf: 0.005000: invalid number
0,000
ロケール出力
@vesnog:~$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=tr_TR.UTF-8
LC_TIME=tr_TR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=tr_TR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=tr_TR.UTF-8
LC_NAME=tr_TR.UTF-8
LC_ADDRESS=tr_TR.UTF-8
LC_TELEPHONE=tr_TR.UTF-8
LC_MEASUREMENT=tr_TR.UTF-8
LC_IDENTIFICATION=tr_TR.UTF-8
LC_ALL=
出力echo $w
@vesnog:~$ echo $w
0.005000
答え1
簡単な方法は以下を使用することですprintf
。
$ printf "%.3f\n" 0.005000000000
0.005
先行を削除するには、0
次のように解析しますsed
。
$ printf "%.3f\n" 0.005000000000 | sed 's/^0//'
.005
答え2
という特別な変数がありますscale
。この変数を設定して精度を制限できます。
はい
$ echo "300/7" | bc -l
42.85714285714285714285
精度を制限するには、
$ echo "scale=2; 300/7" | bc -l
42.85
修正する
$ echo "scale=3; 300/7" | bc -l | sed 's/[0-9]*\././g'
.857
答え3
この sed コマンドは末尾のゼロを削除します。
sed 's/\(0\.0*[1-9][1-9]*\)0*/\1/'
で始まり、その後に0.
0個以上の0
'、1〜9の間の1個以上の数字、0個以上'が来る0
すべての値を記憶します。次に、0個以上の末尾の項目を切り捨てます0
。
これにより、末尾のゼロを必要に応じて解析し、ゼロより大きいランダムな低数を維持できます。どんなに小さくても。
例えば
0.054000
になったり、0.054
に0.00000010000000
なったり0.0000001
などになります。
詳しくはGrymoires Awesomeをご覧ください。sedマップ時間。
答え4
grepを使わないのはなぜですか?
echo "$your_number" | grep -o '.*[1-9]'