Ves*_*nog 8 bash bc floating-point
在 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
Run Code Online (Sandbox Code Playgroud)
语言环境输出
@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=
Run Code Online (Sandbox Code Playgroud)
的输出 echo $w
@vesnog:~$ echo $w
0.005000
Run Code Online (Sandbox Code Playgroud)
ter*_*don 10
一个简单的方法是使用printf:
$ printf "%.3f\n" 0.005000000000
0.005
Run Code Online (Sandbox Code Playgroud)
要删除前导0,只需将其解析为sed:
$ printf "%.3f\n" 0.005000000000 | sed 's/^0//'
.005
Run Code Online (Sandbox Code Playgroud)
有一个特殊的变量叫做scale. 您可以设置此变量来限制精度。
例子
$ echo "300/7" | bc -l
42.85714285714285714285
Run Code Online (Sandbox Code Playgroud)
为了限制精度,
$ echo "scale=2; 300/7" | bc -l
42.85
Run Code Online (Sandbox Code Playgroud)
更新
$ echo "scale=3; 300/7" | bc -l | sed 's/[0-9]*\././g'
.857
Run Code Online (Sandbox Code Playgroud)