Bash 将整数向上、向下或最接近的百位四舍五入

Bash round whole numbers up, down or to nearest hundreds

有一个整数范围像

827818
6574762
685038
55326902

我需要什么,例如,四舍五入到数百以得到相应的结果

827800
6574700
685000
55326900

关于如何使用 Javascript 向上、向下或最近的百位进行舍入的许多想法,例如

Math.floor(number / 100) * 100;

但是在 Bash 中可以做同样的事情吗?

“在 Bash”中的含义并不完全清楚,但也许是以下之一:

$ cat input
827818
6574762
685038
55326902
$ awk '{printf "%d00\n", [=10=] / 100}' input
827800
6574700
685000
55326900

或(如果所有值都大于 100!):

while read x; do echo "${x%[0-9][0-9]}00"; done < input

如果你想处理值小于 100 的情况并处理负值,你可以这样做:

while read x; do if test "${x#-}" -gt 100; then echo "${x%[0-9][0-9]}00"; else echo 0; fi; done < input

但坚持使用 awk 几乎肯定更好。

要四舍五入到最近的 100,请使用(number + 50) / 100 * 100。 您可以修改此计算的每一行,然后 运行 这些表达式通过 bc 来计算它们。

sed 's|.*|(&+50)/100*100|' file | bc