Nu har jag ersatt kalkylatorn calc med bc

Skrivet av Hund, den 5 November 2026

Sedan urminnes tider har jag använt den textbaserade kalkylatorn calc, men eftersom att det projektet nu tillåter AI-slask, behövde jag hitta en ersättare.

Alternativet bc dök snabbt upp. Ett verktyg som jag har sett nämnas många gånger genom åren, men som jag alltid lika snabbt har avfärdat, av den enkla anledningen att den första träffen på webben är "bc (programming language)" på Wikipedia. Jag är ju inte intresserad av ett programmeringsspråk?

Beskrivningen "bc is an arbitrary-precision mathematical calculator program with an input language similar to C" gör ju inte saken mer övertygande.

Men när jag tittade närmare på bc, visade det sig att det går alldeles utmärkt att använda det som en vanlig och enkel kalkylator. Dessutom har man bc installerad som standard i de flesta operativsystemen, eftersom att bland annat GNU Core Utilities och Busybox skeppar sina egna implementationer av verktyget. Ett verktyg som förövrigt skapades för mer än 50 år sedan på Bell Labs.

Precis som calc, kan bc användas via ett interaktivt kommandoradsgränssnitt och genom att 'pipea' informationen till bc:

$ bc
bc 1.37.0
Adapted from https://github.com/gavinhoward/bc
Original code (c) 2018 Gavin D. Howard and contributors
(1+2)*2
6

Om man vill slippa den informativa texten kan man använda flaggan -q:

$ bc -q
(1+2)*2
6

Och för att använda bc via en pipe:

$ echo "(1+2)*2" | bc
6

Värt att nämna är att även om bc kan jobba med vilken precision som helst, är standardinställningen att inte visa några decimaler. Det går att köra med decimaler med flaggan -l, vilket då växlar till en skala om 20 decimaltecken:

$ bc
3/2
1
quit
$ bc -l 3/2 1.50000000000000000000

Om man nöjer sig med två decimaltecken, kan man använda sig av scale=2:

$ bc
scale=2
3/2
1.50

Och via en pipe:

echo "scale=2; 3/2" | bc
1.50

Eftersom att jag är van att skriva calc (samt inte vill skriva onödigt mycket text varje gång) skapade jag en enkel funktion för skalet (man bråkar aldrig med muskelminnet):

calc() {
    echo "scale=2 $1" | bc
}

Nu blir det lite enklare för mig att räkna komplicerade tal:

$ calc "3/2"
1.50

;-)

Meta

Kommentarer

Det finns inga kommentarer för det här inlägget. Använd e-postformuläret om du vill lämna en kommentar. [?]