Титла: Bash: помощ за действие оператор Публикувано от: kid в Aug 25, 2007, 18:03 Здравейте, от съвсем скоро се "захласнах" по писане на скриптове 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 Въпроса ми е, как при сбор на дробни числа резултата да е закръглен до цяло число (примерно 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.... и т.н. Благодаря предварително. П.П. Ако е възможно и с обяснение, все пак целта е да се разбере. А не някой да ти го "изсипе" на готова и следващия път... ![]() Титла: Bash: помощ за действие оператор Публикувано от: VladSun в Aug 25, 2007, 19:26 по първия въпрос:
![]() по втория - нямам идея ![]() Титла: Bash: помощ за действие оператор Публикувано от: Nikolavp в Aug 25, 2007, 20:16
<offtopic> Много хитро измислен. Определно ми хареса. </offtopic> По - добре използвай нещо по - портативно за скриптове, като например python(perl?) ![]() Титла: Bash: помощ за действие оператор Публикувано от: kid в Aug 25, 2007, 22:55
Благодаря... Титла: Bash: помощ за действие оператор Публикувано от: radoulov в Aug 26, 2007, 12:04
zsh:
Титла: Bash: помощ за действие оператор Публикувано от: kid в Aug 26, 2007, 13:35 Нещо не става при мен...:huh:
[kid@xxl-44e57356ff1 ~]$ printf "%0.1f\n" $(echo "9/10"|bc -l) bash: printf: .90000000000000000000: invalid number 0,0 [kid@xxl-44e57356ff1 ~]$ Титла: Bash: помощ за действие оператор Публикувано от: radoulov в Aug 26, 2007, 14:12
Taka:
Може би, така ще е по-бързо (по идея на Chris F.A. Johnson, с изменения):
Титла: Bash: помощ за действие оператор Публикувано от: kid в Aug 26, 2007, 17:23 Благодаря за отделеното време, стана...
Титла: Bash: помощ за действие оператор Публикувано от: sandman_7920 в Aug 27, 2007, 14:53 Проблема ти е главно в това, че не подаваш правилно 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 Титла: Bash: помощ за действие оператор Публикувано от: kid в Aug 27, 2007, 15:32 Също много полезна за мен информация, благодаря много sandman_7920.
Титла: Bash: помощ за действие оператор Публикувано от: radoulov в Aug 27, 2007, 16:23
";" би трябвало да е достатъчно:
Или директно с parameter expansion (bash, ksh93 и zsh):
Но трябва да се внимава с locale-a:
|