Incrementar valores decimais para o próximo valor inteiro

1

Eu quero incrementar o valor decimal para o próximo valor inteiro através do shell script.

For example:
i=**1.6** then I need to print i=**2**
i=**1.00001** then I need to print i=**2**
i=**1.00049** then also I need to print the value as i=**2**

Então, qual é o caso se o valor decimal for maior que o mesmo por .00000001 eu preciso imprimir o valor como 2.

    
por Sandosh Kumar P 14.08.2017 / 18:50

4 respostas

4

Sua pergunta é um pouco ambígua. Se você quiser o próximo número inteiro, seja qual for a parte decimal, abaixo está uma resposta com sh :

echo $((${i%.*} + 1))

Se você quiser o próximo número inteiro se a parte decimal for maior que 0, aqui está uma resposta com sh :

[ -n "${i##*.*[1-9]*}" ]
echo $(( ${i%.*} + $? ))

(o primeiro teste sai com 1 se i tiver algum dígito diferente de 0 após o ponto decimal, senão sai com 0; $? contém o valor de saída)

Mesma ideia com bash , que é um pouco mais legível IMHO:

[[ "$i" != *.*[1-9]* ]]
echo $(( ${i%.*} + $? ))

Usando o POSIX expr , compatível com qualquer shell:

expr "${i%.*}" + \( "${i##*.*[1-9]*}" = "" \)
    
por 14.08.2017 / 18:53
2

Por meio de awk e adicione 0.5 ao resultado, então .f arredondará para o número mais próximo por si só.

awk -F\= 'BEGIN{printf("%.f\n", $2+0.5)}' 
    
por 14.08.2017 / 18:55
0
if [[ '1' -eq "$(echo "$i > ${i%.*}" | bc)" ]]; then
    i=$((${i%.*}+1))
else
    i=${i%.*}
fi
    
por 14.08.2017 / 18:56
0

Esta função simples incrementa qualquer valor decimal para o próximo inteiro. Pode exigir o tratamento do caso em que nenhum argumento é passado para a função shell.

function incIntegerValue() {
    echo $1 | awk '{print int($1+1)}'
}

incIntegerValue 3.001
incIntegerValue 1555.899
    
por 14.08.2017 / 19:35