Naar inhoud springen

Visual Basic/Typeconversie

Uit Wikibooks

Visual Basic

Inhoudsopgave
  1. Inleiding taalelementen
  2. Variabelen
  3. Operatoren
  4. Typeconversie
  5. Keuze-instructies
  6. Herhalingsinstructies
  7. Random getallen
  8. Opmaak getallen
  9. De klasse Math
  10. Arrays
  11. De structuur van een programma

Inleiding typeconversie

[bewerken]

Het kan gebeuren dat je een variabele wilt/moet converteren van een bepaald type naar een ander type. Zo levert de opdracht Console.ReadLine() altijd een string op, ook als naar een getal wordt gevraagd. Je moet dan de string expliciet converteren naar b.v. een integer. Dat doe je met de volgende constructie:

Dim getal As Integer
getal = CInt(Console.ReadLine())

Maar ook tussen getallen kan conversie nodig zijn. Zo bevatten de typen Integer, Decimal, Long, Single, Double, enz. allemaal getallen, maar ook hier is conversie nodig of minstens aan te raden voor de duidelijkheid. Voorbeelden zijn b.v.:

Dim getal1 As Integer = 123
Dim getal2 As Double = 56.47
Dim getal3 As Single
getal3 = CSng(getal1)
getal1 = CInt(getal2)

In de tweede regel zie je dat je een decimale punt moet gebruiken. Als je het programma schrijft, moet je altijd een decimale punt gebruiken. Het is nu eenmaal Engels. Maar als je hetzelfde getal intypt bij een Console.ReadLine() én je Windows hebt ingesteld op Nederlands, moet je een komma gebruiken in plaats van een punt. Een beetje verwarrend, maar dit laat het verschil zien tussen het schrijven van een programma en de uitvoering ervan.

In de laatste regel wordt de inhoud van getal2 afgerond tot 56. Dit gebeurt steeds als een getal met cijfers na de komma wordt geconverteerd naar een geheel getal (Byte, Short, Integer, UInteger, Long, ULong). Hierbij wordt het bankiersalgoritme gebruikt. Dat houdt in dat alle getallen normaal worden afgerond, behalve getallen die precies 0,5 achter de komma hebben. Die worden afgerond op het meest nabijgelegen even getal. Zo levert de conversies van 3,5 en 4,5 allebei de waarde 4 op. Denk hier goed aan!!

Je kunt dit voorkomen door de functie Round te gebruiken om b.v. een Double waarde af te ronden. Hierbij kun je opgeven hoe het getal moet worden afgerond. Het resultaat is weer een Double, dus je moet ook nog CInt() gebruiken om er een geheel getal van te maken. Gebruik de volgende constructie:

 Dim getal1 As Integer
 Dim getal2 As Double = 4.5
 getal1 = CInt(Round(getal2, MidpointRounding.AwayFromZero))

Het is een beetje ingewikkeld. Door de binnenste haakjes wordt eerst getal2 afgerond (Round) en daarna door de buitenste haakjes geconverteerd naar een Integer (CInt).

Conversiefuncties

[bewerken]

Visual Basic kent een aantal conversiefuncties. Iedere functie converteert een willekeurige expressie naar een bepaald type. Zo nodig vindt er afronding plaats. De conversiefuncties zijn:

CBool(expressie)
CBYte(expressie)
CChar(expressie)
CDate(expressie)
CDbl(expressie)
CDec(expressie)
CInt(expressie)
CLng(expressie)
CObj(expressie)
CSByte(expressie)
CShort(expressie)
CSng(expressie)
CStr(expressie)
CUInt(expressie)
CULng(expressie)
CUShort(expressie)

De naam van een conversiefuctie bestaat uit een C gevolgd door de afkorting van het type waarnaar geconverteerd moet worden.

Let op dat conversies naar een geheel getal gebruik maken van het bankiersalgoritme (zie hierboven).

Ter verduidelijking volgen hier enige voorbeelden:

Onderstaand voorbeeld gebruikt de functie CBool om een expressie te converteren naar een Boolean waarde. Als een expressie de waarde 0 oplevert, is het resultaat False en anders True.

Dim A, B, C As Integer
Dim resultaat As Boolean
A = 5
B = 5
resultaat = CBool(A = B)   ' resultaat is True
' ...
C = 0
resultaat = CBool(C)       ' resultaat is False

Onderstaand voorbeeld gebruikt de functie CByte om een expressie te converteren naar een Byte waarde.

Dim varDouble As Double
Dim varByte As Byte
varDouble = 125.5678
varByte = CByte(varDouble)   ' varByte krijgt de waarde 126 (let op
                             ' de afronding).

Onderstaand voorbeeld gebruikt de functie CChar om het eerste teken van een string te converteren naar een Char waarde.

Dim varString As String
Dim varChar As Char
varString = "BCD"            ' CChar converteert alleen het eerste teken.
varChar = CChar(varString)   ' varChar krijgt de waarde "B".

Het argument van CChar moet een string zijn. Het argument kan geen numeriek type zijn (b.v. Integer of Long).

Onderstaand voorbeeld gebruikt de functie CDate om een string te converteren naar een datum. De eerste twee regels converteren een string naar een datum, de twee regels daarna een literal.

Dim varDatumString, varTijdString As String
Dim varDatum, varTijd As Date
varDatumString = "March 12, 2015"
varTijdString = "4:35:37 PM"
' converteer van string naar datum
varDatum = CDate(varDatumString)
varTijd = CDate(varTijdString)
' conveteren van literal naar datum
varDatum = CDate(#Feb 12, 2015#)
varTijd = CDate(#5:12:23 AM#)

Onderstaand voorbeeld gebruikt de functie CDbl om een expressie te converteren naar een Double waarde.

Dim varDec As Decimal
Dim varDouble As Double
varDec = 234.456784D       ' de D achter het getal geeft aan dat dit
                           ' een Decimal is
varDouble = CDbl(varDec)   ' Converteer varDec naar Double

Onderstaand voorbeeld gebruikt de functie CDec om een numerieke waarde te converteren naar een Decimal waarde.

Dim varDouble As Double
Dim varDecimal As Decimal
varDouble = 10000000.0587
varDecimal = CDec(varDouble)   ' converteer varDouble naar een
                              ' Decimal waarde

Onderstaand voorbeeld gebruikt de functie CInt om een numerieke waarde te converteren naar een Integer waarde.

Dim varDouble As Double
Dim varInt As Integer
varDouble = 2345.5678
varInt = CInt(varDouble)   ' rond varDouble af en converteer
                           ' het resultaat naar een Integer waarde. Het
                           ' resultaat is 2346

Onderstaand voorbeeld gebruikt de functie CLng om een numerieke waarde te converteren naar een Long waarde.

Dim varDbl1, varDbl2 As Double
Dim varLong1, varLong2 As Long
varDbl1 = 25427.45
varDbl2 = 25427.55
varLong1 = CLng(varDbl1)   ' rond varDbl af en converteer het resultaat naar een Integer waarde. Het resultaat is 25427
varLong2 = CLng(varDbl2)   ' rond varDb2 af en converteer het resultaat naar een Integer waarde. Het resultaat is 25428

Onderstaand voorbeeld gebruikt de functie CObj om een numerieke waarde te converteren naar een Object waarde. Dit object bevat een pointer naar de waarde. Naast een numerieke waarde kunnen alle mogelijke waarden (string, char, boolean, datum) worden omgezet naar een Object.

Dim varDouble As Double
Dim varObject As Object
varDouble = 2.7182818
varObject = CObj(MvarDouble)   ' varObject is een pointer naar een
                               ' Double met de waarde 2.7182818

Onderstaand voorbeeld gebruikt de functie CShort om een numerieke waarde te converteren naar een Short waarde.

Dim varByte as Byte
Dim varShort as Short
varByte = 100
varShort = CShort(varByte)   ' coverteer de waarde in varByte naar Short

Onderstaand voorbeeld gebruikt de functie CSng om een numerieke waarde te converteren naar een Single waarde. Let erop dat bij een conversie van b.v. Double naar Single een verlies van minder significante cijfers kan optreden.

Dim varDouble1, varDouble2 As Double
Dim varSingle1, varSingle2 As Single
varDouble1 = 75.3421105
varDouble2 = 75.3421567
varSingle1 = CSng(varDouble1)   ' varSingle1 krijgt de waarde 75.34211
varSingle2 = CSng(varDouble2)   ' varSingle2 krijgt de waarde 75.34216

Onderstaand voorbeeld gebruikt de functie CStr om een numerieke waarde te converteren naar een String waarde.

Dim varDouble As Double
Dim varString As String
varDouble = 437.324
varString = CStr(varDouble)   ' MyString krijgt de waarde "437.324".

Onderstaand voorbeeld gebruikt de functie CStr om een datum te converteren naar een String waarde.

Dim varDate As Date
Dim varString As String
' een datum-literal moet in de vorm #m/d/yyyy# zijn
varDate = #2/12/69 00:00:00#   ' de tijd is precies middernacht
' als de tijd precies 0 is (middernacht), komt de tijd niet voor
' in de String
varString = CStr(varDate)   ' varString krijgt de waarde "2/12/1969".
' ...
varDate = #2/12/69 00:00:01#   ' de tijd is nu niet middernacht
' in dit geval wordt de tijd meegenomen in de conversie
varString = CStr(varDate)   ' varString krijgt de waarde
                            ' "2/12/1969 12:00:01 AM".

CStr zet een datum altijd om in de korte notatie volgens de taalinstellingen van Windows, bijvoorbeeld: "6/15/2003 4:35:47 PM".

De functie CType()

[bewerken]

Deze functie converteert een expressie naar een opgegeven type. Het formaat is:

CType(expressie, typenaam)

Hierbij is expressie een geldige expressie; als de waarde buiten het bereik van typenaam valt, treedt er een fout op.
typenaam is één van de typen die je in een Dim-statement kunt gebruiken, dus Boolean, Byte, Char, Date, Decimal, Double, Integer, Long, Object, SByte, Short, Single, String, UInteger, ULong en UShort.

CType() is geen echte functie, maar wordt door de compiler vertaald, zodat deze conversie over het algemeen sneller is dan andere conversie-methoden.

Voorbeeld:

Dim getal1 As Long = 123
Dim getal2 As Integer
getal2 = CType(getal1, Integer)

De functie ToString

[bewerken]

Ieder object heeft een methode ToString. Deze methode zet, afhankelijk van het soort object, de naam of de inhoud om naar een String. Op deze manier kun je alle datatypen omzetten naar een string, b.v.:

Dim getal1 As Integer = 123
Dim getal2 As Double = 12.45
Dim tekst As String
tekst = getal1.ToString & " " & getal2.ToString
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.