Bash

Bash限制浮點變數的精度

  • February 4, 2022

在 Ubuntu 14.04.1 LTS 64-bitbash 中,我通過將浮點 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

引用自:https://unix.stackexchange.com/questions/175744