Dzielenie z wynikiem po przecinku

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
piotrekgk
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 18 paź 2010, 12:59
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Xfce
Architektura: x86

Dzielenie z wynikiem po przecinku

Post autor: piotrekgk »

Witam
Zaczynam zabawę z Bashem, więc jak to na początku bywa mam problem z prostymi skryptami. Otóż znalazłem na necie prosty kalkulator i wszystko dobrze działa póki nie zaczynam dzielić. W wyniku zawsze wychodzi mi liczba bez reszty po przecinku mimo stosowania funkcji bc -l. Może ją wpisuje nie w tym miejscu co trzeba dlatego tak się dzieje. Mógłby ktoś pomóc mi to zrobić?

Kod: Zaznacz cały

#!/bin/sh
echo "Podaj pierwsza liczba:" 
    read a
    echo "Podaj druga liczba:" 
    read b
    echo "Podaj operacje (jedna z): +, - , / lub X" 
    read opr

    if [ $opr = "+" ]
    then
        op=`expr $a + $b`
        echo "$op"
    elif [ $opr = "-" ]
    then
        op=`expr $a - $b`
        echo "$op"
    elif [ $opr = "/" ]
    then
        op=`expr $a / $b`
        echo "$op"
    elif [ $opr = "X" ]
    then
        op=`expr $a \* $b`|bc -l
        echo "$op"
    fi
Awatar użytkownika
valdi74
Wytworny Kaczor
Wytworny Kaczor
Posty: 441
Rejestracja: 01 maja 2007, 12:58
Płeć: Mężczyzna
Wersja Ubuntu: 24.04
Środowisko graficzne: KDE Plasma
Architektura: x86_64
Lokalizacja: Poznań

Re: Dzielenie z wynikiem po przecinku

Post autor: valdi74 »

Wcale nie działa dobrze dla innych działań. Spróbuj dodać liczby niecałkowite (np. 1.2 + 1.3). Nie działa dlatego, że do bc przekazujesz już wynik obliczony na liczbach całkowitych przez expr zamiast przekazywać całą operację. Przykład dla dodawania, który zadziała:

Kod: Zaznacz cały

op=$(echo "$a + $b" | bc -l)
reszta działań analogicznie.
Qui vit sans folie, n'est pas si sage qu'on croit
Ubek308
Zakręcona Traszka
Zakręcona Traszka
Posty: 574
Rejestracja: 25 maja 2011, 10:17
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64

Re: Dzielenie z wynikiem po przecinku

Post autor: Ubek308 »

bc moze miec ułamki, wystarczy uzyc scale=X gdzie X to ilosc miejsc po przecinku.

Dodane pozniej:
Sprawdzilem - bc -l tez daje ulamki, znaczy moj post jest odrobine bez sensu.
Jakby co - mozna go skasowac.
piotrekgk
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 18 paź 2010, 12:59
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Xfce
Architektura: x86

Re: Dzielenie z wynikiem po przecinku

Post autor: piotrekgk »

Super. Właśnie tak to miało działać. Dzięki bardzo
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Bing [Bot] i 14 gości