Invoer getallen

Status
Niet open voor verdere reacties.

ardkapteijn

Gebruiker
Lid geworden
28 mei 2007
Berichten
128
Hallo,

Ben een berekeningsprogramma aan het schrijven (Microsoft visual basic 6.0) waarbij verschillende getallen ingevoerd moeten worden. De gebruiker moet deze invoeren in tekstboxen, ben al een aardig eindje op weg echter loop ik tegen het punt komma verhaal aan.

Wat is de beste manier om een texbox in te lezen, en dit getal te verwerken en weer op te slaan in een andere textbox??

Heb momenteel alle variabele gedeclareerd als Single en een texbox lees in in met:
Vary = Val(txtVarX) / 3
txtVary = Vary

Hebben jullie wat voorbeeldjes, of hoe kan je hebt beste om gaan met komma getallen..

alvast bedankt!

gr,

Ard
 
Je kan gewoon gebruiken:
Code:
Vary = Val(txtVarX) / 3 
txtVary = Vary
(voorbeeld)
voor kommagetallen (afronden) gebruik je
Code:
math.round(getal, decimalen)
"Single" is voor decimale getallen, evenals "Double", maar "Integer" is voor hele getallen!
Voor de rest kan je zelf even rondkijken als je in de VBIDE "math." typt, komt er een dropdown met allerlei leuke types (zoals "round" "abs" enzovoorts)


V.:thumb:
 
Je kan gewoon gebruiken:
Code:
Vary = Val(txtVarX) / 3 
txtVary = Vary
(voorbeeld)
voor kommagetallen (afronden) gebruik je
Code:
math.round(getal, decimalen)
"Single" is voor decimale getallen, evenals "Double", maar "Integer" is voor hele getallen!
Voor de rest kan je zelf even rondkijken als je in de VBIDE "math." typt, komt er een dropdown met allerlei leuke types (zoals "round" "abs" enzovoorts)


V.:thumb:

Oke, bedankt dan ben ik al een goed eind op weg!

alleen rekenen gaat niet lekker 10 - 4.8 = 5,2
10 - 4,8 = 6
Het eerste antwoord klopt alleen gooit ie dan komma en punt door elkaar...2de antwoord snap ik niet, waarschijnlijk ziet ie de 8 niet.
Hoe is dit te verhelpen??

Hoe kan je voorkomen dat er een punt ingevoerd wordt als scheidingsteken ipv een komma?
 
Laatst bewerkt:
een komma "," ziet Visual basic niet als een scheidingsteken voor getallen, een punt "." wel. Daarom altijd punten gebruiken! Komma's zijn bij VB gereserveerd voor code's, en niet voor getallen :)
Code:
Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 44 Then
        'Dit is een komma, verander het naar een punt!
        KeyAscii = 46
    ElseIf KeyAscii = 46 Then
        'Dit is een punt, en dat wil je ;)
    End If
End Sub
Deze code werkt zo: op het moment dat een persoon op een toets drukt terwijl de focus (de cursor) in text1 staat, kijkt de code of er een "punt" (dat is keyAscii # 44) of een komma (keyAscii 46) word getoets, verandert ie t automatisch naar een punt
Ik hoop dat je er wat aan hebt;) ,


V.:thumb:
 
Weer een stap verder, bedankt alvast!

Maar 2 - 2.3 = -0,3 :confused:

In het antwoord zet ie vervolgens alsnog weer die komma neer....

Ik voer in txtPresB nu 2,3 in hiervan maakt ie automatisch 2.3

PresB = Val(txtPresB)

Als ik ga debuggen zie ik dat PresB (1,5) is en niet 1.5. Heeft dit te maken met windows instellingen ofzo? vervolgens gaat ie weer verder rekenen met 1,5 (het komma getal)
 
Ik heb eerlijk gezegd geen idee (en snap je vraag ook niet helemaal) maar mischien helpt dit:
Code:
Replace(varPresB ",", ".")[CODE]
dit verandert de komma naar de punt in de variabele "varPresB"\


V.:thumb:
 
Ik heb eerlijk gezegd geen idee (en snap je vraag ook niet helemaal) maar mischien helpt dit:
Code:
Replace(varPresB ",", ".")[CODE]
dit verandert de komma naar de punt in de variabele "varPresB"\


V.:thumb:[/QUOTE]

Probeer het nog een keer uit te leggen.. hopelijk is dit duidelijker.

Ik heb een getal ingelezen zeg 1300 dit getal wil ik omrekenen naar een andere eenheid hiervoor moet 1300 eerst x 9,81 en daarna / 1000

de formule die ik daarovor gebruik is:

Krachtactkgf = val(txtKrachtactkgf)             'inlezen van textbox
Krachtact7 = Krachtactkgf * 9.81 / 1000      'omrekenen naar andere eenheid

Als ik hem laat rekenen en hem stop na dit stukje programmeercode kan je door je muis boven de variabele de inhoud aflezen. 
Krachtactkgf staat dan ook netjes op 1300
Maar krachtact7 is niet de verwachte 12.753 maar 8,4132....

Als ik 9.81 vervang door 9,81 geeft ie een foutmelding (logisch), maar een antwoord kan die wel in een komma getal geven...

Hopelijk kan hier iemand iets mee, zou zonde zijn als een heel programma hierdoor waardeloos is :(
 
IIk zie het probleem al ;)
Ten eerste is het altijd handig op de explicit te gebruiken: deze zorgt ervoor dat er een error verschijnt als je een variabele niet gedimentioneert hebt.
Code:
Option Explicit
Zet deze code helemaal bovenaan (dus boven alle code)
Verder heb je je variabelen niet gedimentioneert (niet dat daardoor het probleem is ontstaan, maar ik zou het wel doen, is netjes + scheelt op de lange termijn geheugen)
Code:
Dim Krachtactkgf As Double
Dim Krachtact7 As Double
daarnaast heb je in je code "Val(txtKrachtactkgf)" gebruikt, maar dat moet "Val(txtKrachtactkgf.Text)" zijn (omdat je de variabele getallen uit de TEXTbox wilt halen, nu vraag je om de variabele (die niet bestaat)

Even de code verbeterd en samengevat: (ik nam aan dat de code op een knop zat, maar kijk maar wat je zelf doet)
Code:
Option Explicit

Private Sub Command1_Click()
Dim Krachtactkgf As Double
Dim Krachtact7 As Double
Krachtactkgf = Val(txtKrachtactkgf.Text) 'inlezen van textbox
Krachtact7 = Krachtactkgf * 9.81 / 1000 'omrekenen naar andere eenheid
MsgBox Krachtact7
End Sub


V.:thumb:
 
IIk zie het probleem al ;)
Ten eerste is het altijd handig op de explicit te gebruiken: deze zorgt ervoor dat er een error verschijnt als je een variabele niet gedimentioneert hebt.
Code:
Option Explicit
Zet deze code helemaal bovenaan (dus boven alle code)
Verder heb je je variabelen niet gedimentioneert (niet dat daardoor het probleem is ontstaan, maar ik zou het wel doen, is netjes + scheelt op de lange termijn geheugen)
Code:
Dim Krachtactkgf As Double
Dim Krachtact7 As Double
daarnaast heb je in je code "Val(txtKrachtactkgf)" gebruikt, maar dat moet "Val(txtKrachtactkgf.Text)" zijn (omdat je de variabele getallen uit de TEXTbox wilt halen, nu vraag je om de variabele (die niet bestaat)

Even de code verbeterd en samengevat: (ik nam aan dat de code op een knop zat, maar kijk maar wat je zelf doet)
Code:
Option Explicit

Private Sub Command1_Click()
Dim Krachtactkgf As Double
Dim Krachtact7 As Double
Krachtactkgf = Val(txtKrachtactkgf.Text) 'inlezen van textbox
Krachtact7 = Krachtactkgf * 9.81 / 1000 'omrekenen naar andere eenheid
MsgBox Krachtact7
End Sub


V.:thumb:

Hartelijk dank :thumb:

Weer wat geleerd :D

Heb het ff snel geprobeerd bij 1 klein berekeningentje maar het werkt nu, het zat hem in het inlezen met Val(txtKrachtactkgf.Text) en declareren als Double ik had single...
 
Single kan ook hoor, even opzoeken:
Single: decimale getallen: 4 bytes (+/- 1.4^ -45 tot 3.4^38)
Double: decimale getallen, 8 bytes (+/- 1.7^ -308 tot 4.9^-324)
dus in dit geval maakt het geen ene ruk uit wat je gebruikt, ik neem aan dat je nog niet zo veel decimale/grote getallen gebruikt (ik ook niet door, maar toch :p)


V.:thumb:
 
Single kan ook hoor, even opzoeken:
Single: decimale getallen: 4 bytes (+/- 1.4^ -45 tot 3.4^38)
Double: decimale getallen, 8 bytes (+/- 1.7^ -308 tot 4.9^-324)
dus in dit geval maakt het geen ene ruk uit wat je gebruikt, ik neem aan dat je nog niet zo veel decimale/grote getallen gebruikt (ik ook niet door, maar toch :p)


V.:thumb:

Noujah dan ligt het aan ".text" waarschijnlijk meer heb ik niet verander ;) het werkt iedergeval weer, nu nog ff de output proberen weg te schrijven in een tekstbestandje... deel van de code is al gelukt alleen eht wegschrijven naar een door de gebruik aangewezen locatie lukt nog niet echt :confused: Heb je daar ook nog een tip voor?? :rolleyes:

Neuh, 3 cijfers achter de komma is genoeg... er zit alleen een loop in, waarmee die een relatief grote berekening net zolang uit voert totdat ie bij een waarde uit komt. Je ziet nu al dat de processor het daar moeilijk mee heeft :D

gr,

Ard
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan