bash:如何round/floor/ceiling非小数的千位数?
bash: How to round/floor/ceiling non-decimals thousands number?
假设我这里有这个号码100675
如何变成101000
我在 google 上找到的所有解决方案都是解决小数问题。
bash
shell 可以在内部进行计算,例如以下成绩单:
pax:~> for x in 100675 100499 100500 100999 101000; do
...:~> ((y = (x + 500) / 1000 * 1000))
...:~> echo " $x becomes $y"
...:~> done
100675 becomes 101000
100499 becomes 100000
100500 becomes 101000
100999 becomes 101000
101000 becomes 101000
此语句 ((y = (x + 500) / 1000 * 1000))
首先将 500 添加 500 以将除以 1,000 的其他截断整数除以 舍入 除法,然后再将其乘以 1,000。
这是一个有点奇怪的功能,但这里有一个粗略的版本,可能是您需要的。至少这可以作为一个起点。
# in:
# - the number to round
# - the 10 power to round at. Defaults to 3 (i.e. 1000)
# output:
# The rounded number
roundPow()
{
local n=""
local pow="${2:-3}"
local div="$((10 ** pow))"
echo "$((((n + div / 2) / div) * div))"
}
这是非常粗糙的边缘,它不是验证参数等,但应该给你一个基线。
希望对您有所帮助。
假设我这里有这个号码100675
如何变成101000
我在 google 上找到的所有解决方案都是解决小数问题。
bash
shell 可以在内部进行计算,例如以下成绩单:
pax:~> for x in 100675 100499 100500 100999 101000; do
...:~> ((y = (x + 500) / 1000 * 1000))
...:~> echo " $x becomes $y"
...:~> done
100675 becomes 101000
100499 becomes 100000
100500 becomes 101000
100999 becomes 101000
101000 becomes 101000
此语句 ((y = (x + 500) / 1000 * 1000))
首先将 500 添加 500 以将除以 1,000 的其他截断整数除以 舍入 除法,然后再将其乘以 1,000。
这是一个有点奇怪的功能,但这里有一个粗略的版本,可能是您需要的。至少这可以作为一个起点。
# in:
# - the number to round
# - the 10 power to round at. Defaults to 3 (i.e. 1000)
# output:
# The rounded number
roundPow()
{
local n=""
local pow="${2:-3}"
local div="$((10 ** pow))"
echo "$((((n + div / 2) / div) * div))"
}
这是非常粗糙的边缘,它不是验证参数等,但应该给你一个基线。
希望对您有所帮助。