use*_*172 1 sed decimal rounding
我有一个数字,即123.456789,我的问题是如何在点后将其舍入到两位小数,所以看起来像123.46使用sed?有任何想法吗?或者,如何在2位小数后减少其余部分,所以最终看起来像这样:123.45?提前致谢!
anu*_*ava 12
实际上sed不是最好的工具,你应该更好地使用awk.像这样创建一个awk脚本:
echo 123.45567 | awk '{printf("%.2f\n", $1)}'
Run Code Online (Sandbox Code Playgroud)
或使用BASH printf:
printf "%.2f\n" 123.45567
Run Code Online (Sandbox Code Playgroud)
123.46
截断它可以通过以下方式完成:
pax> echo hello 123.4567 goodbye | sed 's/\(\.[0-9][0-9]\)[0-9]*/\1/g'
hello 123.45 goodbye
Run Code Online (Sandbox Code Playgroud)
这基本上是通过查找形式的字符串.dd[ddd...](其中d是数字)并将整个内容替换为.dd(括号用于捕获.dd位)来实现的。
舍入它有点困难,因为它不是简单的文本替换(如果下一个数字是五个或更多,您必须更改最后一个数字以添加一个)。为此,您可能需要使用适应性更强的工具。
一种方法(虽然我很确定这不是最好的方法)是Perl:
pax> echo hello 123.4567 9876.54321 goodbye | perl -ne '
@x = split;
for ($i = 0; $i <= $#x; $i++) {
if ($x[$i] =~ /^[0-9]*\.[0-9]+$/) {
$x[$i] = int ($x[$i] * 100 + .5) / 100;
};
print "$x[$i] ";
};
print "\n";'
hello 123.46 9876.54 goodbye
Run Code Online (Sandbox Code Playgroud)
这对匹配所需模式的每个字段执行舍入操作,但如上所述,它非常丑陋 - 我相信有更好的方法(brian d foy,你在哪里?)