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

**URL:** <https://linux.ru/forum/t/topic/9912>\
**Category:** Программирование общее\
**Created:** [06.Февраль.2012 14:52:36 UTC](https://linux.ru/forum/t/topic/9912 "2012-02-06T14:52:36Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Shperung](https://linux.ru/forum/letter_avatar_proxy/v4/letter/s/b9bd4f/32.png) [@Shperung](https://linux.ru/forum/u/Shperung)\
**Post date:** [06.Февраль.2012 14:52:36 UTC](https://linux.ru/forum/t/topic/9912/1 "2012-02-06T14:52:36Z")

</div>

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

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

```

---

<div class="post-metadata">

**Author:** ![gogi](https://linux.ru/forum/letter_avatar_proxy/v4/letter/g/958977/32.png) [@gogi](https://linux.ru/forum/u/gogi)\
**Post date:** [06.Февраль.2012 16:47:22 UTC](https://linux.ru/forum/t/topic/9912/2 "2012-02-06T16:47:22Z")

</div>

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

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

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

```

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

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

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

---

<div class="post-metadata">

**Author:** ![Sleeping\_Daemon](https://linux.ru/forum/letter_avatar_proxy/v4/letter/s/ecccb3/32.png) [@Sleeping\_Daemon](https://linux.ru/forum/u/Sleeping_Daemon)\
**Post date:** [07.Февраль.2012 04:23:06 UTC](https://linux.ru/forum/t/topic/9912/3 "2012-02-07T04:23:06Z")

</div>

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

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

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

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

```

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

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

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

Да ну.

man bash

раздел “ARITHMETIC EVALUATION”

---

<div class="post-metadata">

**Author:** ![gogi](https://linux.ru/forum/letter_avatar_proxy/v4/letter/g/958977/32.png) [@gogi](https://linux.ru/forum/u/gogi)\
**Post date:** [07.Февраль.2012 13:42:39 UTC](https://linux.ru/forum/t/topic/9912/4 "2012-02-07T13:42:39Z")

</div>

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"

```

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

---

<div class="post-metadata">

**Author:** ![gogi](https://linux.ru/forum/letter_avatar_proxy/v4/letter/g/958977/32.png) [@gogi](https://linux.ru/forum/u/gogi)\
**Post date:** [07.Февраль.2012 14:16:48 UTC](https://linux.ru/forum/t/topic/9912/5 "2012-02-07T14:16:48Z")

</div>

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 и здесь вне конкуренции

---

<div class="post-metadata">

**Author:** ![Sleeping\_Daemon](https://linux.ru/forum/letter_avatar_proxy/v4/letter/s/ecccb3/32.png) [@Sleeping\_Daemon](https://linux.ru/forum/u/Sleeping_Daemon)\
**Post date:** [08.Февраль.2012 04:19:14 UTC](https://linux.ru/forum/t/topic/9912/6 "2012-02-08T04:19:14Z")

</div>

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"

```

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

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

---

<div class="post-metadata">

**Author:** ![gogi](https://linux.ru/forum/letter_avatar_proxy/v4/letter/g/958977/32.png) [@gogi](https://linux.ru/forum/u/gogi)\
**Post date:** [08.Февраль.2012 07:05:31 UTC](https://linux.ru/forum/t/topic/9912/7 "2012-02-08T07:05:31Z")

</div>

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

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

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