bc и scale (округлить результат умножения и сложения)

Модератор: Модераторы разделов

Аватара пользователя
AlexYeCu
Сообщения: 1137
ОС: fedora

bc и scale

Сообщение AlexYeCu »

Такой вот вопрос. scale устанавливает точность только для деления, а в примерах вида $traffic*1.6+1200 игнорируется. Как быть? Хотелось бы в баше воспользоваться чем-то вроде Math.round/Math.ceil ну и просто ограничить точность не только для результатов деления.
Спасибо сказали:
MiK13
Сообщения: 1290
ОС: Linux Debian

Re: bc и scale

Сообщение MiK13 »

AlexYeCu писал(а):
31.03.2009 13:14
Такой вот вопрос. scale устанавливает точность только для деления, а в примерах вида $traffic*1.6+1200 игнорируется. Как быть?
Пока ничего другого, как добавить к результату 0.5*10^(-scale) и потом разделить на 1 в голову не приходит.
Правда, я с bc практически не работал и поэтому знаю его очень плохо
AlexYeCu писал(а):
31.03.2009 13:14
Хотелось бы в баше воспользоваться чем-то вроде Math.round/Math.ceil ну и просто ограничить точность не только для результатов деления.

Так в баше или в bc ?
Спасибо сказали:
Аватара пользователя
AlexYeCu
Сообщения: 1137
ОС: fedora

Re: bc и scale

Сообщение AlexYeCu »

MiK13 писал(а):
31.03.2009 15:19
Так в баше или в bc ?

А какая разница? Bash только с целыми числами работает. Поэтому приходится использовать bc.
Спасибо за идею с делением на один.
Спасибо сказали:
Аватара пользователя
AlexYeCu
Сообщения: 1137
ОС: fedora

Re: bc и scale

Сообщение AlexYeCu »

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

#!/bin/bash
`wget -q --secure-protocol=auto --no-check-certificate --output-document=radugastat.html https://balance.ru:8011 --post-data="user_name=user_vpn&user_pass=parol"`
mystats=`cat /home/AlexYeCu/radugastat.html| grep '<TD BGCOLOR=#ff00ff> ' | cut -c33-40 | sed s/,/./`
rm /home/AlexYeCu/radugastat.html
overload=$(echo "scale=3;$mystats - 1024" | bc )
abonpay=150
overpay=1.6
prepay=1060
if $(echo "scale=3;$overload <= 0" | bc)
then
overload=0
money= $abonpay + $prepay
else
money=$(echo "scale=2;($overload * $overpay + $prepay + $abonpay)/1" | bc )
fi
echo "траффик="$mystats "Мб"
echo "перерасход="$overload "Мб"
echo "расходы="$money" рублей"
exit 0


Просьба помочь со скриптом.
Номер раз, его исполнение выдаёт:

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

./raduga: line 9: 0: команда не найдена
траффик=1098.127 Мб
перерасход=74.127 Мб
расходы=1328.60 рублей


Номер два:

как бы правильно распарсить строчку:

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

cut -c33-40
подходит лишь при перерасходе, а когда траффика меньше гига, то там и цифр меньше, и в вырезку попадают лишние символы:

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

<TD BGCOLOR=#ff00ff>&nbsp333,33&nbsp... >
как бы их правильно отрезать sed`ом или ещё как?

UP: на номер два ответ нашёл.

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

sed 'y/,&nbsp/.     /'
Спасибо сказали: