Титла: Математически изрази с десетична точка Публикувано от: qwerty11 в Sep 09, 2010, 20:38 Нещо елементарно, но немога да се справяяя, на няколко ракии затъпявам.
Трябва да събера две числа 1 + 1.1, с let и expr май нестава, а вариянта със echo 0.04 - 0.05 | bc ми дава кофти форматиране от -.01 , и от там да слагам sed не искам. Някой да каже вариянт. Титла: Re: Математически изрази с десетична точка Публикувано от: koue в Sep 09, 2010, 20:53 echo 2 + 3.4 | bc
Титла: Re: Математически изрази с десетична точка Публикувано от: qwerty11 в Sep 09, 2010, 21:15 echo 2 + 3.4 | bc а вариянта със echo 0.04 - 0.05 ми дава кофти форматиране от -.01 Нещо друго Титла: Re: Математически изрази с десетична точка Публикувано от: morbid_viper в Sep 09, 2010, 21:48 имай предвид, че bash много-много не разбира от реални числа – само целочислени…
затова и се ползва bc особено коварно е при разни сравнения… доста съм си блъскал главата в стената с тая простотия. все пак виж това: echo $(printf "%f\n" `echo 0.04 - 0.05 | bc`) имай предвид, че за различни локали може да не работи както си мислиш, например на български (LANG=bg_BG.UTF-8) ще очаква десетична запетая, но bc няма как да се сети за това и ще очаква десетична точка. Титла: Re: Математически изрази с десетична точка Публикувано от: qwerty11 в Sep 09, 2010, 23:04 мерси morbid_viper, поне за мен това е по-добро решение от обработката със SED. Резултата го подавам на if и става неочакваното. Пий една бира [_]3
Титла: Re: Математически изрази с десетична точка Публикувано от: morbid_viper в Sep 09, 2010, 23:51 … Резултата го подавам на if и става неочакваното… както писах по-горе bash не се погажда с десетични дробни числа и няма да можеш много лесно да го използваш за сравнение в if. препоръчвам ти да заобиколиш това като умножиш и двете сравнявани стойности с достатъчно голямо число, така, че да промениш разрядността и да не те интересува дробната част. например, искаш да сравниш 5,6 с 4,92. умножаваш ги двете със 100 и получаваш съответно 560 и 492. тук вече bash ще откликне по-отзивчиво :-) ако не знаеш предварително колко ти е най-голямата точност след запетаята можеш да пробваш нещо от сорта на: echo -n "30,45446"| cut -s -d "," -f2-|wc -m като съответно си промениш точката или запетаята според твоя локал. горното дава желания резултат +1 (което не ми се занимава да разбера защо cut добавя един нов ред и той влиза в сметката после), но за целта на занятието става. остава ти да направиш едно: echo $(( 10**6 )) където 6 е резултатът от горната сметка и ще получиш числото, с което трябва да умножиш двете дробни стойности за да се отървеш от десетичната част. успех! |