在 Ubuntu bash 中,我通过将浮点 bash 变量与比例设置为 314.04.1 LTS 64-bit
相乘来清除浮点变量;bc
但是,我无法使小数点后的位数为零并去掉小数点左侧的零。我怎样才能转变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
答案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
'、后跟 1-9 中的 1 个或多个数字、后跟零个或多个0
' 的任何值。然后它会截断零个或多个尾随的0
。
这允许您解析出任意数量的尾随零,并保留任何大于零的任意低数字。不管它有多小。
例如
0.054000
变成0.054
,或者0.00000010000000
变成0.0000001
,等等。
欲了解更多信息,请查看 Grymoires Awesomesed教程。
答案4
为什么不使用 grep 呢?
echo "$your_number" | grep -o '.*[1-9]'