Dette dokument gennemgår de forskellige taltyper der anvendes i Python.
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'>
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.
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/
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
For at konvertere mellem de forskellige taltyper anvender vi følgende funktioner:
int()
>>> int(2.0)
2
float()
>>> float(2)
2.0
Fraction()
>>> from fractions import Fraction
>>> Fraction(0.125)
Fraction(1, 8)
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.
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:
Python bruger dette præfix til at bestemme hvilket positionssystem tallet er i. Er der ikke noget præfix er det base 10.
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.
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