Решено: преобразование переменной

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Alex181
Сообщения: 44
ОС: Linux RH

Решено: преобразование переменной

Сообщение Alex181 »

Всем доброго дня!
Подскажите пожалуйста, как можно преобразовать строковую переменную в число?

Код: Выделить всё

-bash-3.2$ v=9.9
-bash-3.2$ if [ $v -eq 9.9 ]
> then echo "GOOD"
> fi
-bash: [: 9.9: integer expression expected
-bash-3.2$ if [ $v = 9.9 ]; then echo "GOOD"; fi
GOOD
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Решено: преобразование переменной

Сообщение allez »

Bash поддерживает только целочисленные переменные и вообще работает лишь с целыми числами. О чем, собственно, вам и было сказано. ;)
Alex181 писал(а):
08.10.2009 09:41
-bash: [: 9.9: integer expression expected


Поэтому подумайте, нужно ли вам это преобразование? Но если все же сочтете, что нужно, то можете объявлять целочисленные переменные с помощью встроенной команды declare.
Спасибо сказали:
Alex181
Сообщения: 44
ОС: Linux RH

Re: Решено: преобразование переменной

Сообщение Alex181 »

allez писал(а):
08.10.2009 09:44
Bash поддерживает только целочисленные переменные и вообще работает лишь с целыми числами. О чем, собственно, вам и было сказано. ;)
Alex181 писал(а):
08.10.2009 09:41
-bash: [: 9.9: integer expression expected


а округлить тогда есть возможность?
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Решено: преобразование переменной

Сообщение allez »

Alex181 писал(а):
08.10.2009 09:51
а округлить тогда есть возможность?
Ну, не округлить, а отбросить дробную часть можно:

Пример

$ declare -i a=9,9; echo $a 9


Если же нужно именно округление, то можно воспользоваться утилитой bc.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5433
ОС: Gentoo

Re: Решено: преобразование переменной

Сообщение /dev/random »

Можно использовать bc:
if [ $(bc <<<"$v == 9.9") == 1 ]; then...

Но должен предупредить, что сравнение вещественных чисел на равенство - вещь неблагодарная, и не только в баше. К примеру, 1/3*9 не равно трём, поскольку число 1/3 компьютер способен представить лишь приближённо, и при умножении этой "приблизительно трети" на девять получится "приблизительно три", а не три.
Спасибо сказали:
Alex181
Сообщения: 44
ОС: Linux RH

Re: Решено: преобразование переменной

Сообщение Alex181 »

ребят, спасибо за разъяснения!
Спасибо сказали: