Перейти к содержимому
Shperung

Дробная часть

Рекомендуемые сообщения

Shperung писал(а) Пнд, 06 Февраль 2012 18:52

возникла проблема при делении двух чисел - результат всегда целый. Как сделать дробный

let res=$s/$pecho "Результат= $res"

Подобный код практически на любом шелле выдаст либо ошибку, либо непредсказуемый результат. Сами то пробовали, перед тем как на форум постить?

/ - это не деление, а символ разделения каталогов файловой системы.

Вообще в шэлле (в бэшэ, например), вещественных переменных нет. Есть только строки и целые цисла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

gogi писал(а) Пнд, 06 Февраль 2012 21:47

Shperung писал(а) Пнд, 06 Февраль 2012 18:52
возникла проблема при делении двух чисел - результат всегда целый. Как сделать дробный

let res=$s/$pecho "Результат= $res"

Подобный код практически на любом шелле выдаст либо ошибку, либо непредсказуемый результат. Сами то пробовали, перед тем как на форум постить?

/ - это не деление, а символ разделения каталогов файловой системы.

Вообще в шэлле (в бэшэ, например), вещественных переменных нет. Есть только строки и целые цисла.

Да ну.

man bash

раздел "ARITHMETIC EVALUATION"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Sleeping Daemon писал(а) Втр, 07 Февраль 2012 08:23

gogi писал(а) Пнд, 06 Февраль 2012 21:47
Shperung писал(а) Пнд, 06 Февраль 2012 18:52
возникла проблема при делении двух чисел - результат всегда целый. Как сделать дробный

let res=$s/$pecho "Результат= $res"

Подобный код практически на любом шелле выдаст либо ошибку, либо непредсказуемый результат. Сами то пробовали, перед тем как на форум постить?

/ - это не деление, а символ разделения каталогов файловой системы.

Вообще в шэлле (в бэшэ, например), вещественных переменных нет. Есть только строки и целые цисла.

Да ну.

man bash

раздел "ARITHMETIC EVALUATION"

И что там написано о вещественных переменных? Может еще и пример приведете.

Сторонние утилиты типа bc не в зачет.

PS. Если, конечно, Ваше возражение касается только кода

let res=$s/$pecho "Результат= $res"

о моего ответа о "/" - то это, действительно, сарказм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

cat sh

let res=1.0/2.0

echo "Результат= $res"

gg@c-1:~$ zsh sh

Результат= 0.5000000000

Бэш даст 0. Остальные (sh, dash, csh, tcsh - ошибку)

Замечу, 1) правильные скрипты пишутся под sh. 2) В большинстве дистрибутивов линукс скрипты инициализации обрабатываются dash.

Ну а zsh и здесь вне конкуренции Smile

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

gogi писал(а) Втр, 07 Февраль 2012 18:42

Sleeping Daemon писал(а) Втр, 07 Февраль 2012 08:23
gogi писал(а) Пнд, 06 Февраль 2012 21:47
Shperung писал(а) Пнд, 06 Февраль 2012 18:52
возникла проблема при делении двух чисел - результат всегда целый. Как сделать дробный

let res=$s/$pecho "Результат= $res"

Подобный код практически на любом шелле выдаст либо ошибку, либо непредсказуемый результат. Сами то пробовали, перед тем как на форум постить?

/ - это не деление, а символ разделения каталогов файловой системы.

Вообще в шэлле (в бэшэ, например), вещественных переменных нет. Есть только строки и целые цисла.

Да ну.

man bash

раздел "ARITHMETIC EVALUATION"

И что там написано о вещественных переменных? Может еще и пример приведете.

Сторонние утилиты типа bc не в зачет.

PS. Если, конечно, Ваше возражение касается только кода

let res=$s/$pecho "Результат= $res"

о моего ответа о "/" - то это, действительно, сарказм.

Именно кода. В данном случае / интерпритируется как деление. Так что код верный. А вот ожидемый результат - нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Sleeping Daemon писал(а) Срд, 08 Февраль 2012 08:19

Именно кода. В данном случае / интерпритируется как деление. Так что код верный. А вот ожидемый результат - нет.

В случае бэша - да (опять же если переменнные - целочисленные, а не типа 5.00), в sh - ошибку. let - это БАШИЗМ и его обычно избегают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×