bash + sed:从一个浮点数修剪尾随零?

Roc*_*uts 5 regex floating-point bash sed

我试图从浮点数中删除尾随的十进制零,但到目前为止没有运气.

echo "3/2" | bc -l | sed s/0\{1,\}\$//
1.50000000000000000000
Run Code Online (Sandbox Code Playgroud)

我希望得到,1.5但不知何故尾随零不被截断.如果不是0\{1,\}我明确地写0或000000等,它会按输入的顺序排除零,但显然我需要它是动态的.

怎么了0\{1,\}

fed*_*qui 10

你为什么不设置你想要的位数scale

$ echo "scale=1; 3/2" | bc -l 
1.5
$ echo "scale=2; 3/2" | bc -l 
1.50
$ echo "scale=5; 3/2" | bc -l 
1.50000
Run Code Online (Sandbox Code Playgroud)

我建议您通过man bc,因为它包含许多有趣的方式来呈现您的结果.


Ner*_*elu 10

echo "3/2" | bc -l | sed '/\./ s/\.\{0,1\}0\{1,\}$//'
Run Code Online (Sandbox Code Playgroud)
  • 删除尾随0如果有小数点分隔符
  • 如果分隔符后面只有0,则删除分隔符(假设在BC之前至少有一个数字)


anu*_*ava 6

$ 不得转义并引用sed模式:

echo "3/2" | bc -l | sed 's/0\{1,\}$//'
1.5
Run Code Online (Sandbox Code Playgroud)

  • @Etan实际上,`\ {1,\}`[更便携](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_06) (2认同)