Avatar billede tvh33 Nybegynder
02. februar 2008 - 19:11 Der er 11 kommentarer

Programet kan ikke regen med decimaltal!

jeg har levet et prgram bestående af en del textboxe. Jeg har kaldt dem for text1, text2 osv. ca. halvdelen er read-only. I de andre skal du taste værdier ind. Disse værdier skal kunne være tal med (i hvert fald) 5 decimaler. Jeg har en knap, der når man klikker på den, udfører koder som fx:

Dim fro As Double
fro = 0.02895   
Dim frs As Double 
frs = 8.31

Text4.Text = (Val(fro) * Val(Text1.Text)) / (Val(frs) * Val(Text2.Text))

Dette eksempel virker fint nok, men når den bruger en af de tal med decimaler, som man skriver ind i en textbox, er det som om den sletter alle decimal-tallene og kun tager det foran kommaet. Forestil dig at man i programmet skal kunne finde tyngdekraften af en samlet masse. Svaret skal stå i textbox10 og de forskellige masser indtaster man i textbox6 og textbox7.

Dim tyngdeacceleration As Double
tyngdeacceleration = 9.82

Text10.Text = (Val(Text6.Text) + val(Text7.Text)) * Val(tyngdeacceleration)

Hvis man så, når man kører programmet, indtaster:

i textbox 6: 0.444
i textbox 7: 0.666

Så skulle der gerne stå "9.82" i textbox 10.

Men der står i stedet:  10.002

Gør jeg noget forkert? Det virker fint nok, når jeg programmerer i xp, men ikke på vista..
Avatar billede erikjacobsen Ekspert
02. februar 2008 - 19:59 #1
Det er bare indstilinger i dine OS-er om der skal anvendes komma eller punktum som "decimalkomma", altså "dansk" vs. "engelsk" standard.
Avatar billede tvh33 Nybegynder
02. februar 2008 - 20:14 #2
Det står til "engelsk komma", altså punktum
Avatar billede erikjacobsen Ekspert
02. februar 2008 - 20:21 #3
Åbenbart ikke på den Vista du bruger. Hvis din Vista er dansk så skal de vel bruge komma.
Avatar billede arne_v Ekspert
03. februar 2008 - 02:49 #4
Øh.

Resultatet burde vel være "10.9002" ??

(0.444+0.666 er *ikke* 1)
Avatar billede arne_v Ekspert
03. februar 2008 - 02:50 #5
så check lige alle tal og beregninger
Avatar billede tvh33 Nybegynder
03. februar 2008 - 10:43 #6
ups..:D nåh men problemet er der på en måde stadig. Når man i en textbox kommer frem til et resultat, ved at indsaætte andre tal i andre textboxe. Så kan man ikke bruge det resultat i andre beregninger, ligesom i excel hvor du kan sige (E2= B5+C6)..
Avatar billede tvh33 Nybegynder
03. februar 2008 - 10:45 #7
0.444 + 0.666 = 1.11
Avatar billede tjacob Juniormester
03. februar 2008 - 11:39 #8
En sidebemærkning omkring decimalkomma:

Uanset hvilket locale du har i Vista eller VB, så kan "Val"-funktionen IKKE læse kommaer. Den kan KUN bruge [.] som decimalseparator. Derfor er det nok mere sikkert at bruge CDbl() der tager hensyn til locale-indstillinger.

Desuden er det dårlig kodepraksis at bruge alle disse typekonverteringer mellem String og Double til beregninger. Du bør bruge variabler af den rette type (Double) til alle mellemregninger, og til at holde resultater.
Textboxene bør kun bruges til input, og til at VISE resultatet.
Dvs at hvis du skal regne videre på indholdet af textbox10, så skal du ikke bruge textboxen til at holde resultatet, men derimod en Double-variabel, som du så kan konvertere til en String for at VISE i textbox10.

Det er klart at konvertering er nødvendigt på inputboxene, men ALLE andre tal (beregningsresultater) bør du have liggende i Double-variable hvis de skal bruges videre frem.
Avatar billede ibhuck Nybegynder
05. februar 2008 - 19:16 #9
Jeg kender ikke så meget til Visual Basic, men har haft samme problem med Visual Dbase, som jeg har et godt kendskab til. Problemet har jeg løst ved, inden at bruge "val", deler tallet op i to dele(substr.....), en del før komma og en anden del efter komma. Så kan man rent matematisk i programmet få det nøjagtige tal. Håber, at det også kan bruges i Visual Basic
Avatar billede ibhuck Nybegynder
05. februar 2008 - 19:23 #10
Det var egentlig blot ment som en kommentar.
Avatar billede tvh33 Nybegynder
06. februar 2008 - 15:21 #11
har brugt variabel-løsningen, og det virker nogenlunde nu.. tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester