web-dev-qa-db-ja.com

浮動小数点変数の精度を制限するbash

Ubuntu 14.04.1 LTS 64-bit bashでは、bcの浮動小数点bash変数にスケールを3に設定して乗算することで、浮動小数点変数をクリアしています。ただし、小数点以下の桁数をゼロにして、小数点の左側のゼロを取り除くことができません。 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
6
Vesnog

簡単な方法は、printfを使用することです。

$ printf "%.3f\n" 0.005000000000
0.005

先頭の0を削除するには、sedを使用して解析します。

$ printf "%.3f\n" 0.005000000000 | sed 's/^0//'
.005
8
terdon

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

6
Thushi