19. december 2007 - 08:44Der 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
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
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).
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
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
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
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).
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
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.
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
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.