Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB] Wat doe ik mis?

Pagina: 1
Acties:

  • Kridri
  • Registratie: Juli 2012
  • Laatst online: 27-08 12:56
Beste,

Ik ben dus begonnne met mijzelf vb.net aan te leren met behulp van het boek:" Visual Basic 2008 voor studenten" van Douglas Bell en Mike Parr. Maar ik loop tegen een probleem aan.

De opdracht:

Schijf een programma dat het eindsaldo(s) op een bankrrekening berekent. Het beginsaldo(b), het aantal jaren(n) en de rente(r) per jaar kunnen varieren. Gebruik de volgende forumule: s=b(1+r/100)^n

Mijn code

VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim s As Double     ' s is de beginwaarde
        Dim b As Double     ' b is de beginwaarde
        Dim n As Integer    ' n is het aantal jaren 
        Dim r As Double     ' r is de rente

        ' Dim s,b,r As Double
        ' dim n As Integer

        TextBox1.Text = b
        TextBox2.Text = n
        TextBox3.Text = r

        s = b * (1 + (r / 100) ^ n)

        MessageBox.Show("Saldo: " & s)


    End Sub
End Class]


Maar als ik het programma dan debug. Maakt het niet uit welke waarde in invul in de textboxen. Ik krijg steeds nul als uitkomst.

Alvast bedankt,

Kridri

Als iedereen een klein beetje luier was, zouden er een heleboel problemen zo de wereld uit zijn


  • Onoffon
  • Registratie: April 2006
  • Laatst online: 09:46
Probeer eerst een simpele waarde terug te krijgen, bijvoorbeeld s*b of een vaste waarde en ga dan steeds verder, je komt dan vanzelf op de fout uit.

Just a simple thought....


  • beany
  • Registratie: Juni 2001
  • Laatst online: 14:59

beany

Meeheheheheh

Waar worden de waardes van b, n en r gezet? Het enige wat je doet is TextBox1, TextBox2 en TextBox3 vullen met b, n en r die initieel op 0 staan.

Ik denk dat
code:
1
TextBox1.Text = b

moet zijn
code:
1
b = double.Parse(TextBox1.Text)

Ofterwel: vul b met de waarde die in TextBox1.Text staat. Dit moet je ook doen voor n en r :)

Ik weet overigens niet hoe double.Parse er in VB.NET uitziet, ik zit meer in C#.

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Dat is MSDN: Conversion.Val Method (String) (Microsoft.VisualBasic)

Maar het lijkt me handig om te leren debuggen. Als je een breakpoint zet op regel 12, en de code stapje voor stapje uit voert, dan zie je vanzelf dat de variabelen niet correct gevuld worden. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 16:22

Knutselsmurf

LED's make things better

beany schreef op donderdag 27 juni 2013 @ 09:49:
Waar worden de waardes van b, n en r gezet? Het enige wat je doet is TextBox1, TextBox2 en TextBox3 vullen met b, n en r die initieel op 0 staan.

code:
1
TextBox1.Text = b
Een handige tip in dit opzicht is om = niet te lezen als 'is gelijk aan', maar als 'wordt'. Als je dan je code hardop leest, zul je direct merken waar het mis gaat.

- This line is intentionally left blank -


  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
beany schreef op donderdag 27 juni 2013 @ 09:49:
Ik weet overigens niet hoe double.Parse er in VB.NET uitziet, ik zit meer in C#.
Gelukkig maakt dat weinig uit, want je zou hier decimal.Parse moeten hebben. :+

Wanneer je met geld gaat rekenen sla je dat op in een decimal en nooit in een double!

De interne representatie van het double type (IEEE-754 floating point) maakt dat bepaalde getallen achter de komma niet correct opgeslagen kunnen worden en dat er afrondfouten optreden bij een groot aantal decimalen voor of achter de komma. Als je dat paart met rentes (en dus rentes over rentes, jaren opeen) kan dat behoorlijk funest zijn voor de correctheid van je eindsaldo.

Het decimal type gebruikt een andere interne representatie waarmee deze problemen geminimaliseerd worden.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
R4gnax schreef op donderdag 27 juni 2013 @ 11:30:
[...]
Het decimal type gebruikt een andere interne representatie waarmee deze problemen geminimaliseerd worden.
Om wat preciezer te zijn, een decimal gebruikt een representatie in het decimale stelsel, en dat komt dus overeen met de represenatie van de input. De floating point representatie kan niet alle decimale getallen representeren dus zal er bij conversie afgerond worden naar de dichtstbijzijnde representatie, wat dus in dit geval tot verkeerde resultaten kan leiden.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Kridri
  • Registratie: Juli 2012
  • Laatst online: 27-08 12:56
pedorus schreef op donderdag 27 juni 2013 @ 09:56:
Dat is MSDN: Conversion.Val Method (String) (Microsoft.VisualBasic)

Maar het lijkt me handig om te leren debuggen. Als je een breakpoint zet op regel 12, en de code stapje voor stapje uit voert, dan zie je vanzelf dat de variabelen niet correct gevuld worden. ;)
Dit komt in een volgend hoofdstuk aan de pas. Dan zal het boek er dieper op ingaan.
Knutselsmurf schreef op donderdag 27 juni 2013 @ 10:04:
[...]

Een handige tip in dit opzicht is om = niet te lezen als 'is gelijk aan', maar als 'wordt'. Als je dan je code hardop leest, zul je direct merken waar het mis gaat.
Merci, voor de tip. Het werkt nu!!!
R4gnax schreef op donderdag 27 juni 2013 @ 11:30:
[...]

Gelukkig maakt dat weinig uit, want je zou hier decimal.Parse moeten hebben. :+

Wanneer je met geld gaat rekenen sla je dat op in een decimal en nooit in een double!

De interne representatie van het double type (IEEE-754 floating point) maakt dat bepaalde getallen achter de komma niet correct opgeslagen kunnen worden en dat er afrondfouten optreden bij een groot aantal decimalen voor of achter de komma. Als je dat paart met rentes (en dus rentes over rentes, jaren opeen) kan dat behoorlijk funest zijn voor de correctheid van je eindsaldo.

Het decimal type gebruikt een andere interne representatie waarmee deze problemen geminimaliseerd worden.
Tx, maar het boek heeft tot op dit moment alleen nog maar double of integer besproken. Daarom had ik het gebruik. Maar toch bedankt voor de uitleg voor een later tijdstip.

Als iedereen een klein beetje luier was, zouden er een heleboel problemen zo de wereld uit zijn


  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Kridri schreef op donderdag 27 juni 2013 @ 14:36:
Tx, maar het boek heeft tot op dit moment alleen nog maar double of integer besproken.
Knap verkeerd programmeervoorbeeld wat de auteurs daar dan gebruiken. Hoop voor je dat dit zich niet doorzet in de rest v/h boek. :/

  • Kridri
  • Registratie: Juli 2012
  • Laatst online: 27-08 12:56
Tis een oefening op declarene van textboxen en hiermee een bereking doen.

Als iedereen een klein beetje luier was, zouden er een heleboel problemen zo de wereld uit zijn


  • JivZ
  • Registratie: Oktober 2001
  • Laatst online: 20-11 14:57
Overigens klopt je formule ook niet als dit je formule had moeten zijn:

s=b(1+r/100)^n

Je laatste haakje ) staat verkeerd.

  • Kips
  • Registratie: Januari 2005
  • Laatst online: 13:29
(jarig!)
beany schreef op donderdag 27 juni 2013 @ 09:49:
Waar worden de waardes van b, n en r gezet? Het enige wat je doet is TextBox1, TextBox2 en TextBox3 vullen met b, n en r die initieel op 0 staan.

Ik denk dat
code:
1
TextBox1.Text = b

moet zijn
code:
1
b = double.Parse(TextBox1.Text)

Ofterwel: vul b met de waarde die in TextBox1.Text staat. Dit moet je ook doen voor n en r :)

Ik weet overigens niet hoe double.Parse er in VB.NET uitziet, ik zit meer in C#.
Dit inderdaad!
Double.Parse(x) werkt in VB ook :)
Pagina: 1