Min*_*int 40 linux bash shell ceil
我该怎么做:
ceiling(N/500)
Run Code Online (Sandbox Code Playgroud)
N代表一个数字.
但是在一个linux Bash脚本中
Kal*_*lle 77
为何使用外部脚本语言?你默认得到楼层.要获得ceil,做
$ divide=8; by=3; let result=($divide+$by-1)/$by; echo $result
3
$ divide=9; by=3; let result=($divide+$by-1)/$by; echo $result
3
$ divide=10; by=3; let result=($divide+$by-1)/$by; echo $result
4
$ divide=11; by=3; let result=($divide+$by-1)/$by; echo $result
4
$ divide=12; by=3; let result=($divide+$by-1)/$by; echo $result
4
$ divide=13; by=3; let result=($divide+$by-1)/$by; echo $result
5
....
Run Code Online (Sandbox Code Playgroud)
考虑到负数,你可以加强一点.可能更干净的方式,但对于初学者
$ divide=-10; by=10; neg=; if [ $divide -lt 0 ]; then let divide=-$divide; neg=1; fi; let result=($divide+$by-1)/$by; if [ $neg ]; then let result=-$result; fi; echo $result
-1
$ divide=10; by=10; neg=; if [ $divide -lt 0 ]; then let divide=-$divide; neg=1; fi; let result=($divide+$by-1)/$by; if [ $neg ]; then let result=-$result; fi; echo $result
1
Run Code Online (Sandbox Code Playgroud)
小智 16
使用ceil函数调用脚本语言.鉴于$NUMBER
:
python -c "from math import ceil; print ceil($NUMBER/500.0)"
Run Code Online (Sandbox Code Playgroud)
要么
perl -w -e "use POSIX; print ceil($NUMBER/500.0), qq{\n}"
Run Code Online (Sandbox Code Playgroud)
这是一个使用bc的解决方案(应该几乎安装在任何地方):
ceiling_divide() {
ceiling_result=`echo "($1 + $2 - 1)/$2" | bc`
}
Run Code Online (Sandbox Code Playgroud)
这是纯粹在bash中的另一个:
# Call it with two numbers.
# It has no error checking.
# It places the result in a global since return() will sometimes truncate at 255.
# Short form from comments (thanks: Jonathan Leffler)
ceiling_divide() {
ceiling_result=$((($1+$2-1)/$2))
}
# Long drawn out form.
ceiling_divide() {
# Normal integer divide.
ceiling_result=$(($1/$2))
# If there is any remainder...
if [ $(($1%$2)) -gt 0 ]; then
# rount up to the next integer
ceiling_result=$((ceiling_result + 1))
fi
# debugging
# echo $ceiling_result
}
Run Code Online (Sandbox Code Playgroud)
你可以使用awk
#!/bin/bash
number="$1"
divisor="$2"
ceiling() {
awk -vnumber="$number" -vdiv="$divisor" '
function ceiling(x){return x%1 ? int(x)+1 : x}
BEGIN{ print ceiling(number/div) }'
}
ceiling
Run Code Online (Sandbox Code Playgroud)
产量
$ ./shell.sh 1.234 500
1
Run Code Online (Sandbox Code Playgroud)
或者,如果有选择,您可以使用更好的shell来执行浮点运算,例如Zsh
integer ceiling_result
ceiling_divide() {
ceiling_result=$(($1/$2))
echo $((ceiling_result+1))
}
ceiling_divide 1.234 500
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
44019 次 |
最近记录: |