Saltar al contenido

Obtener el entero de techo a partir del número en linux (BASH)

Hacemos una revisión exhaustiva cada artículo de nuestro espacio con la meta de enseñarte siempre la información certera y certera.

Solución:

¿Por qué utilizar lenguajes de escritura externos? Obtienes piso por defecto. Para conseguir ceil, haz

$ divide=8; by=3; (( result=(divide+by-1)/by )); echo $result
3
$ divide=9; by=3; (( result=(divide+by-1)/by )); echo $result
3
$ divide=10; by=3; (( result=(divide+by-1)/by )); echo $result
4
$ divide=11; by=3; (( result=(divide+by-1)/by )); echo $result
4
$ divide=12; by=3; (( result=(divide+by-1)/by )); echo $result
4
$ divide=13; by=3; (( result=(divide+by-1)/by )); echo $result
5
....

Para tener en cuenta los números negativos, puede reforzarlo un poco. Probablemente formas más limpias, pero para empezar

$ divide=-10; by=10; neg=; if [ $divide -lt 0 ]; then (( divide=-divide )); neg=1; fi; (( result=(divide+by-1)/by )); if [ $neg ]; then (( result=-result )); fi; echo $result
-1

$ divide=10; by=10; neg=; if [ $divide -lt 0 ]; then (( divide=-divide )); neg=1; fi; (( result=(divide+by-1)/by )); if [ $neg ]; then (( result=-result )); fi; echo $result
1

(Editado para cambiar let ... a (( ... )).)

Llame a un lenguaje de secuencias de comandos con función ceil. Dado $NUMBER:

python -c "from math import ceil; print ceil($NUMBER/500.0)"

o

perl -w -e "use POSIX; print ceil($NUMBER/500.0), qqn"

Aquí hay una solución usando bc (que debería instalarse en casi todas partes):

ceiling_divide()  bc`

Aquí hay otro puramente en 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

Si guardas alguna cuestión y forma de beneficiar nuestro ensayo te recordamos escribir una nota y con mucho placer lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *