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
有一个整数范围像
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