Avatar billede rigpig Nybegynder
19. december 2007 - 08:44 Der er 12 kommentarer og
1 løsning

Division med textboxe

Har en masked textbox: maskMudWeight.Text
Samt en konstant: 65.44
Formlen er: (65.44-maskMudWeight.Text)/65.44
Resultatt skal vises i: txtBouyancy.Text

Har bla. prøvet:
double Sum1 = double.Parse(maskMudWeight.Text);
            const double constant = 65.44;

              double Sum2 = (constant - Sum1) / (constant);
              (txtBouyancy.Text) = Sum2.ToString();

Kan bare ikke få det til at virke, har prøvet at oprette en textBox med 65.44 og så parse på kryds og tværs, men det gav forkert resultat.
Hvor går jeg forkert, har prøvet at slå op på nettet samt bøger.
Mvh
Rigpig
Avatar billede nielle Nybegynder
19. december 2007 - 09:42 #1
Hvad mener du præcis med at du ikke har fået den til ar virke?

Koden ser ok ud, men det afhænger af situationen den bruges i.

Bort set fra det er der muligvis et problem mht. eventuelle afrundingsfejl...
Avatar billede rigpig Nybegynder
19. december 2007 - 11:43 #2
Hej nielle.

Det giver flg. resultat :  -0,711491442542787 med 11.2 i Sum1 (maskMudWeight.Text)
Men (65.44-11.2)/65.44 giver 0.828850856 med lommeregner.
Mvh
rigpig
Avatar billede pidgeot Nybegynder
19. december 2007 - 11:50 #3
Du skal bruge danske decimaler i din tekstboks (altså 11,2 i stedet for 11.2), fordi din computer er sat til at bruge danske formater til tal, m.v..

Du kan gennemtvinge et bestemt format i double.Parse ved at sende en passende IFormatProvider med som anden parameter (mere specifikt skal det vist være en CultureInfo-instans), men ellers skal du bruge det systemet ville bruge - ellers bliver 11.2 opfattet som 112 (vi bruger jo punktum som tusindtalsseparator, og den begynder ikke at kigge på om det er placeret rigtigt ift. antal cifre).
Avatar billede erikjacobsen Ekspert
19. december 2007 - 11:51 #4
Når du bruger "." som komma i tallet opfattes det som "112". Prøv bare at skriver "11,2"
Avatar billede rigpig Nybegynder
19. december 2007 - 12:09 #5
Grunden til at bruge "." som seperator, er at der vil være både englændere og danskere som brugere, har tidligre laver programmet i VBA, det var et stort problem.
Hvad kan jeg gøre hvis det skal virke ens på computere der er sat op til engelsk og dansk keyboard ??
Mvh
rigpig
Avatar billede rigpig Nybegynder
19. december 2007 - 12:40 #6
Ups, ved ikke om det er vigtigt, men:
maskMudWeight.Text er masked som "-.--" og sat til english(us)
Skulle det ikke virke??
Beklager den maglende info.
Mvh
Rigpig
Avatar billede erikjacobsen Ekspert
19. december 2007 - 12:44 #7
Hvis du både vil tillade "11.2" og "11,2" kan du jo lave en replace på streng-værdien inden double.Parse
Avatar billede rigpig Nybegynder
19. december 2007 - 13:16 #8
Fik tidligere et råd fra globen:
double input = double.Parse(textBox.Text.Replace(',', '.'));
Den erstatter "," med "." men er det ikke hvad masked også gør, english (us) nu er jeg lidt rundt på gulvet &:)
Hvis jeg skriver strengen fra masked ud i en textBox, står der 11.2
Mvh
rigpig
Avatar billede pidgeot Nybegynder
19. december 2007 - 13:20 #9
Dit problem er at .NET *ikke* forventer et punktum, men et komma. Det gør den fordi når Double.Parse ikke får andet at vide, går den ud fra systemets indstillinger (som jo nok er sat til dansk) - og den eneste måde at fortælle den der skal bruges et specifikt format er ved at sende en passende CultureInfo med som en ekstra parameter. Den Replace du viser laver om fra dansk til engelsk, men det hjælper jo stadig ikke når den netop forventer dansk.

Du kan selvfølgelig vende den replace om, så du erstatter punktum med komma, men det vil være pænere at bruge CultureInfo (når nu du ikke vil tillade det format computeren er sat op til at bruge, men vil have det i engelsk format).
Avatar billede rigpig Nybegynder
19. december 2007 - 15:32 #10
Tak for forklaringen pidqeot
Der er et forsøg mere, hvis "forkert" operator bruges, bliver resultatet altid med minus tegn foran, kan man få programmet til at undesøge strengen for et "-" tegn, så kan en messageBox gøre opmærksom på at der skal ændres seperator ??
Det er nemmere, end at lære Englændere at bruge komma.
Sætter virkelig pris på jeres hjælp!
Mvh
rigpig
Avatar billede pidgeot Nybegynder
19. december 2007 - 17:28 #11
Som jeg allerede har sagt kan du bare skrive i koden at den altid skal bruge engelsk format ved at sende en CultureInfo med til Double.Parse. Kig på MSDN for at se hvordan du bruger den.

Ellers er det jo ikke systemet du *kompilerer* på der bestemmer parsningen, men systemet det bliver *kørt* på. Hvis de englændere bare har sat deres PC til at bruge engelsk formatering til tal m.v., så bliver det også korrekt når den parser med punktum.
Avatar billede rigpig Nybegynder
19. december 2007 - 18:22 #12
Hej pidqeot
Enig angående Engelske PC'er, med det også Englændere der bruger PC'er sat op til Dansk(Norsk)
Jeg kiger på CultureInfo, tak for hjælpen, smid et svar for points.
rigpig
Avatar billede pidgeot Nybegynder
19. december 2007 - 18:42 #13
Det får du da bare. :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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