Bash
Bash限制浮點變數的精度
在 Ubuntu
14.04.1 LTS 64-bit
bash 中,我通過將浮點 bash 變數乘以bc
比例設置為 3 來清除浮點變數;但是,我無法使小數點後的位數為零並擺脫小數點左側的零。我怎樣才能轉換,說0.005000000
成.005
?由於我的文件命名約定,這是必要的。感謝您的建議。更新:我可以將它用於已定義的 shell 變數並重新定義它們嗎?以下程式碼給了我一個錯誤。
~/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
一個簡單的方法是使用
printf
:$ printf "%.3f\n" 0.005000000000 0.005
要刪除前導
0
,只需將其解析為sed
:$ printf "%.3f\n" 0.005000000000 | sed 's/^0//' .005
有一個特殊的變數叫做
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