Запомняне

» Здравейте
[ Вход :: Регистриране ]
 » Начало » Li Форуми » Help & Support » Applications » BASH:  помощ за действие оператор
Тема: BASH:  помощ за действие оператор
Мнение #1 Skip to the next post in this topic.
Написано на: Август 24 2007, 13:15

Avatar




Група: Li fans
Мнения: 35
Регистриран: Септември 2006

Оценка: няма

Offline
Здравейте, от съвсем скоро се "захласнах" по писане на скриптове na BASH и имам 2 проблема който не мога да реша.
1-вият е за сибиране на дробни числа, пример:
$atrack=134.243935
$vtrack=562.207763
echo "scale=1;$atrack + $vtrack" | bc)
така написан ми дава резултат -> 696.451698 макар , че съм задал един знак след десетичната запетая.
Ако променя дейсвието на "/" няма проблем:
echo "scale=1; 562.207763 / 134.243935" | bc
резултат -> 4.1
echo "scale=2; 562.207763 / 134.243935" | bc
резултат -> 4.18

Пробвах и по този начин:
echo "$((134,243935 + 562,207763))"
но тогава резултата е -> 207763    :14;
Въпроса ми е, как при збор на дробни числа резултата да е закръглен до цяло число (примерно 696 в случайя) или дробно но с един знак след десетичната запетая (примерно 696.4).

2-рият ми въпрос е за дейсвие "/" при което резултата е по-малък от 0
Примерни имам число(стойност) 9 кето искам да раздяля на 10
ето какво правя:
echo "scale=1; 9 / 10" | bc
но вместо резултата да е 0.9 излиза .9
ако пък го напиша така:
echo "$((9 / 10))"
резултата е 0
Въпроса ми е как трабва да се напише за да ми излизат резултатите както си му е реда... 0.1 , 0.2 , 0.3.... и т.н.
Благодаря предварително.

П.П.
Ако е възможно и с обяснение, все пак целта е да се разбере. А не някой да ти го "изсипе" на готова и следващия път... :29;  :29;  :29;
:D

Мнение #2
Skip to the previous post in this topic. Написано на: Август 27 2007, 14:35
sandman_7920

Avatar




Група: Li fans
Мнения: 2
Регистриран: Август 2007

Оценка: няма

Offline
Проблема ти е главно в това, че не подаваш правилно scale на bc-то
Трябва да ползваш "echo -e" това ти дава право на expression в баш общо-взето да можеш да му кажеш къде да има enter

a=`echo -e "scale=2\n9/10"|bc`
echo $a

Това ти дава .90 до втория знак.
За форматиране на стринга можеш да ползваш printf, кофтито тук, е че printf(man printf) ползва за десетичен знак ',' а bc връща '.' за това:
a=`echo -e "scale=5\n 562.207763 / 134.243935" | bc`
a=`echo $a|replace . ,` - това сменя '.' с ','
printf "%.2f" $a
Тук е важно да се отбележи, че printf прави закръгляне, а не режи стринг-а като scale на bc


Редактирано от sandman_7920 на Август 27 2007, 14:44
Контакти:  sandman_7920
WEB  
Общо 1 отговор(а) от Август 24 2007, 13:15 до сега
 » Начало » Li Форуми » Help & Support » Applications » BASH:  помощ за действие оператор

© 2014 Linux Index Project
Powered by iF 1.0.0 © 2006 ikonForums