bc
obsługuje liczby jako liczby całkowite:
# echo "100/3" | bc
33
bc -l
obsługuje liczby jako obiekty zmiennoprzecinkowe:
# echo "100/3" | bc -l
33.33333333333333333333
Czy istnieje sposób na ograniczenie liczby cyfr po przecinku?
command-line
bc
Adam Matan
źródło
źródło
scale=0;1234*1.1
, musisz napisać, jakscale=0;1234*1.1/1
zdobyć1357
. W przeciwnym razie, bez względu na wartośćscale
, otrzymasz1357.4
.1234*1.0
to da1234.0
Odpowiedzi:
Ustaw
scale
specjalną zmienną:źródło
$ echo "scale=2; (100/180)*180" | bc
daje 99,00 :(.5
.~$ echo "scale=2; 12/104" | bc
.11
W przypadku zaokrąglenia w górę byłoby to.12
. Jednak nadal powinno to spełniać moje zadanie.echo "result = (100/180) * 180; scale=2; result / 1" | bc -l
. Teraz masz99.99
.scale
działa tylko dla podziału; jeśli niektórzy maniacy potrzebują tego w rozmnażaniu, możesz to zrobić za pomocą manipulacji ciągami. Powiedz, jeśli potrzebujesz pomnożyć32 * 0.60
, odpowiedź brzmi19.20
. Jeśli chcesz uzyskać odpowiedź w pojedynkę, możesz to zrobić różnymi metodami.Używanie manipulacji ciągami
Składnia manipulacji ciągiem:
${Variable%pattern}
spowoduje to usunięcie krótkiego pasującego wzorca, który nastąpi po%
. Więcej informacji na temat manipulacji ciągami znajduje się w przewodniku Advanced Bash-Scripting .Używanie
Scale
jak stwierdzono przez**chronitis**
Aby pozbyć się ostatnich zer, zamiast manipulacji ciągiem, można również podzielić przez 1.
źródło
Oprócz poprzednich odpowiedzi
Zwroty
Dodaj operacje matematyczne, aby uzyskać tylko 2 liczby dziesiętne - (NUMER * 100) / 100
Teraz wraca
źródło
możesz także użyć polecenia printf, aby zaokrąglić wynik do 3 miejsc po przecinku
źródło
Zaokrąglenie
Skala = 2 obcina odpowiedź na dwie cyfry dziesiętne, ale możemy zaokrąglić w następujący sposób:
źródło