LINUX.ORG.RU

bash деление


0

1

Такой код выведет 5, те округлит при делении до целого

X=523;
(( X /= 100 ));
echo $X;

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

★★★★

Последнее исправление: quest (всего исправлений: 1)

умножь делимое перед делением на 10, а потом в результате надо будет добавить точку слева от последней цифры. Короче говоря awk или sed тебе помогут.

dikiy ★★☆☆☆
()

ЕМНИП, bash не работает с вещественными числами.
Как вариант — написать процедуру для деления «в столбик» через / и %.

voidmaster
()
dikiy@Bugzz:~/.aMule/Incoming$ echo $((5230/100)) |sed 's/\([0-9]$\)/.\1/'
5.2
dikiy@Bugzz:~/.aMule/Incoming$ echo $((52300/100)) |sed 's/\([0-9][0-9]$\)/.\1/' 
5.23

dikiy@Bugzz:~/.aMule/Incoming$ 
dikiy ★★☆☆☆
()
Ответ на: комментарий от zolden

imho у bash самое большое распространение, у bc уже меньше, у zsh еще меньше. я в итоге сделал костыль на bash через деление сначала на 10 а потом уже на 100, не проверял но думаю работает быстрее чем внешний вызов bc или sed

quest ★★★★
() автор топика
$ x=523
$ let xa=$x/100 xb=$x%100
$ printf "%d.%2.2d\n" $xa $xb
5.23
$ x=502
$ let xa=$x/100 xb=$x%100
$ printf "%d.%2.2d\n" $xa $xb
5.02
io ★★
()
Ответ на: комментарий от io

$x сами добавите

$ printf "%d.%2.2d\n" $((502/100)) $((502%100))
5.02
io ★★
()
Ответ на: комментарий от dikiy

кстати, в моей школе слово «округление» как-то по-другому преподавалось, видимо реформа образования сказалась...

echo $((5299/100)) |sed 's/\([0-9]$\)/.\1/'
5.2

zolden ★★★★★
()
Ответ на: комментарий от marvin_yorke

кстати и bc там тоже присутствует.

printf и expr более стандартны - это coreutils

quest ★★★★
() автор топика
Ответ на: комментарий от zolden

кстати, в моей школе слово «округление» как-то по-другому преподавалось, видимо реформа образования сказалась...

echo $((5299/100)) |sed 's/\([0-9]$\)/.\1/'

5.2

не беда. Достаточно на один знак большк брать.

dikiy ★★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.