Taltyper

Dette dokument gennemgår de forskellige taltyper der anvendes i Python.

  • Integers - heltal
  • Float - decimaltal
  • Fractions - brøker
Integers - heltal
  • Integers er heltal. Det er den talmængde vi i matematik kalder \( \mathbb{Z} \).
  • Eksempler på heltal kan være: -37, -4, 0, 7, 21, 443.
float - decimaltal
  • Float er decimaltal. Det er den talmængde vi i matematik kalder \( \mathbb{R} \).
  • Eksempler på decimaltal kan være: -17,9 ; -2,01 ; 0,007 ; 4,209 ; 356,07
Fractions - brøker
  • Float er decimaltal. Det er den talmængde vi i matematik kalder \( \mathbb{R} \).
  • Eksempler på decimaltal kan være: -17,9 ; -2,01 ; 0,007 ; 4,209 ; 356,07

Bestem taltype

Man bestemmer tallets type ved hjælp af kommandoen type(). Se eksemplet herunder:

>>> heltal = 4
>>> decimaltal = 4.1
>>> from fractions import Fraction
>>> brøk = Fraction(1,4)
>>> type(heltal)
<class 'int'>
>>> type(decimaltal)
<class 'float'>
>>> type(brøk)
<class 'fractions.Fraction'>

Lidt om float

I dette materiale bliver float omtalt som decimaltal - hvilket er korrekt "with a twist".

Float er baseret på det binære talsystem, hvilket giver nogle unøjagtigheder, når man når mange decimaler ned. Se nedestående eksempel:

>>> 3*0.1
0.30000000000000004

Det er jo ikke korrekt, fordi \( 3 \cdot 0,1 = 0,3 \).

I vores sammenhæng med matematik og fysik, der er float nøjagtig nok, da vi sjældent arbejder på så nøjagtigt niveau, men i finansregning kan det være nødvendig at arbejde med rigtige decimaltal.

brug af Decimal() - ægte decimaltal

Decimal() er eksakte tal og kan sættes til en nøjagtighed på 28 cifre og decimaler i alt. Det er en funktion der skal kaldes. Herunder er regnestykket \( 1.30+1.20 \) udregnet både med float (standard) og decimal():

>>> 1.30+1.20
2.5
>>> from decimal import *
>>> Decimal(1.30)+Decimal(1.20)
Decimal('2.500000000000000000000000000')

I eksemplet ovenfor anvendes standard antallet af decimaler, som er 27. Dette kan begrænses til f.eks. 5.

>>> getcontext().prec=8
>>> Decimal(1.30)+Decimal(1.20)
Decimal('2.5000000')

Læs mere: https://docs.python.org/3/library/decimal.html

https://financetrain.com/best-python-librariespackages-finance-financial-data-scientists/

Er mit float resultat et heltal

Hvis man har lavet en beregning der viser resultatet som en float, så kan man tjekke om resultatet er en integer. Svaret kommer som enten True eller False.

Det gøres med kommandoen [tallet].is_integer(). Se eksemplet herunder:

>>> 17.0.is_integer()
True
>>> 2.5.is_integer()
False

Hvis man prøver at gøre det samme med en int, så melder programmet fejl:

>>> 17.is_integer()
  File "<pyshell>", line 1
    17.is_integer()
       ^
SyntaxError: invalid syntax

Konvertering af taltyper

For at konvertere mellem de forskellige taltyper anvender vi følgende funktioner:

int()
Konverterer til integers - Fylder mindst i hukommelsen

Eksempel

>>> int(2.0)
2
float()
Konverterer til decimaltal

Eksempel

>>> float(2)
		2.0
Fraction()
Konverterer til en brøk

Eksempel

>>> from fractions import Fraction
>>> Fraction(0.125)
Fraction(1, 8)

Andre talsystemer

Vi er vant til at anvende 10-talssystemet, men i programmerings- og computersammenhænge kan det være praktisk at anvende andre talsystemer især det binære (2-talssystem) og det hexadecimale (16-talssystem), som f.eks. anvendes til at beskrive farver. Man siger at talsystemerne har et grundtal/base, som bestemmer hvornår der skiftes position.

Vores tiltalsystem er altså base-10 og det binære talystem er base-2.

Base10 til baseX

Her vil vi kigge på hvordan vi konverterer til det binære (base2)og det hexadecimale (base16) talsystem

bin() - Konvertering til binære tal (base2)
>>> bin(100)
'0b1100100'
hex() - Konvertering til hecadecimale tal (base16)
>>> hex(100)
'0x64'

Læg mærke til at talene kommer tilbage som tekststrenge og med et præfix:

  • 0b = binær
  • 0x = hexadecimal

Python bruger dette præfix til at bestemme hvilket positionssystem tallet er i. Er der ikke noget præfix er det base 10.

BaseX til base10 talssystem

For at konvertere tal med anden base til 10 talssystemet anvendes int(). Det fungerer ved at man i parantesen skriver tallet man vil konvertere og basen der skal konverteres fra.

>>> int("100",2)
4
>>> int("100",8)
64
>>> int("100",10)
100
>>> int("100",16)
256	

Tallene der skal konverteres skal sættes ind som tekststrenge

Du skal skrive basen du konverterer til efter , - også selvom du skriver basens prefix.

Beregninger med andre talsystemer

Herunder udregnes \( 5 \cdot 5 \) i base5:

>>> bin(5)
'0b101'
>>> bin(0b101*0b101)
'0b11001'

For at tjekke om det er korrekt kan vi konvertere til base10:

>>> int(_,2)
25