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

Ser*_*rge 0 bash numbers rounding

有一系列完整的正数,例如

827818
6574762
685038
55326902
Run Code Online (Sandbox Code Playgroud)

例如,我需要四舍五入到数百才能得到相应的结果

827800
6574700
685000
55326900
Run Code Online (Sandbox Code Playgroud)

例如,许多想法如何使用 Javascript 向上、向下或最接近数百

Math.floor(number / 100) * 100;
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*ell 5

“在 Bash 中”是什么意思并不完全清楚,但可能是其中之一:

$ cat input
827818
6574762
685038
55326902
$ awk '{printf "%d00\n", $0 / 100}' input
827800
6574700
685000
55326900
Run Code Online (Sandbox Code Playgroud)

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

while read x; do echo "${x%[0-9][0-9]}00"; done < input
Run Code Online (Sandbox Code Playgroud)

如果要处理值小于 100 的情况并处理负值,可以执行以下操作:

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

但几乎可以肯定,坚持使用awk.