Ceil только числа с плавающей запятой в bash linux - PullRequest
0 голосов
/ 31 января 2019

В linux bash я хочу получить следующее целое число для данного числа, только если это число с плавающей запятой.Я пытался с

count=$((${count%.*} + 1));

Но с приведенным выше кодом, все время (даже если число не с плавающей запятой), он дает следующее целое число.

Ожидаемый результат:

345.56 => 346
345.12 => 346
345 => 345

Может кто-нибудь помочь мне найти решение?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 31 января 2019

в авк.Некоторые записи испытаний:

$ cat file    # dont worry about stuff after =>
345.56 => 346
345.12 => 346
345 => 345
345.0
0 
-345.56 => 346
-345.12 => 346
-345 => 345
-345.0

The awk:

$ awk '{print $1 " => " int($1)+($1!=int($1)&&$1>0)}' file
345.56 => 346
345.12 => 346
345 => 345
345.0 => 345
0 => 0
-345.56 => -345
-345.12 => -345
-345 => -345
-345.0 => -345
0 голосов
/ 31 января 2019

Вам нужно будет проверить наличие точки:

case $count in
    *.*) count=$(( ${count%.*} + 1 )) ;;
      *) : nothing to do
         ;;
esac

или

[[ $count == *.* ]] && count=$(( ${count%.*} + 1 ))
0 голосов
/ 31 января 2019

вы можете использовать

NUMBER=365
perl -w -e "use POSIX; print ceil($NUMBER/1.0), qq{\n}"

для присвоения переменной

MYVAR=$(perl -w -e "use POSIX; print ceil($NUMBER/1.0), qq{\n}")
...