Avatar billede Nicolai Nybegynder
05. januar 2011 - 15:23 Der er 7 kommentarer og
1 løsning

Konvertering af tal med forskellige regionale indstillinger

Hej,

Jeg har lavet et program der hente data fra en SQL database, laver lidt matematik og så præsentere resultatet i en textbox. Dette virker strålende med Dansk som Regional Setting. Men i Det sekund jeg skifter til Norsk eller Engelsk, så fejler programmet og skriver:

"Conversion from string "1.000,00" to type Double is not valid.

Min prgramkode der fejler er her:

If myReader.GetString(0) = "Z3C4" Or myReader.GetString(0) = "Z3CT" Then
                    Me.CI.Text = myReader.GetString(3) * 100
                    Me.BP_CI.Text = "per " & myReader.GetString(4) & " months"
                End If

Hvad gør jeg for at løse problemet?

Takker :)
Avatar billede arne_v Ekspert
05. januar 2011 - 15:52 #1
Det er jo ogsa rigtigt.

Paa dansk bruger man 1.000,00 mens man paa eneglsk bruger 1,000.00 !

Jeg ville nok konsekvent bruge det engelske format og saa eksplicit angive at der skal bruges engelske konventioner.
Avatar billede Nicolai Nybegynder
05. januar 2011 - 16:21 #2
Alle data i databsen står med Dansk tegnsætning (##.###,##), og det har jeg ikke mulighed for at ændre. Så jeg er nød til at leve med den del af problemet.

Kan jeg på en måde tvinge min kode til at opfatte og beregne tallene ved brug af dansk tegnsætning?

Selve præsentationen af resultatet i tekstboksen må gerne være den lokale regionale tegnsætning. Det betyder ikke noget for mig, da værdien i tekstboksen ikke bruges til beregning, men kun til brug for at vise brugeren resultatet.
Avatar billede Nicolai Nybegynder
05. januar 2011 - 16:25 #3
Jeg har googlet lidt, og kan forstå at man kan Parse en string/value til et specifikt CultureInfo (Regional Setting). Men jeg er helt blank på hvordan jeg gør det... :)
Avatar billede arne_v Ekspert
05. januar 2011 - 16:35 #4
double.Parse(sval, new CultureInfo("da-DK", false))
Avatar billede Nicolai Nybegynder
06. januar 2011 - 09:38 #5
Jeg har prøvet at anvende dit forslag, men den giver mig nu følgende fejl: "Input string was not in a correct format" på denne programlinje:

Me.CI.Text = Double.Parse(myReader.GetString(3), New CultureInfo("da-DK", False)) * 100

Læser jeg formatet i SQL databasen er tallet 4.200,00

Jeg har prøvet andre ændre Double til Int32, men det giver samme fejl.
Avatar billede Nicolai Nybegynder
06. januar 2011 - 12:17 #6
Det skal siges at feltet i SQL er defineret som nvarchar, men værdien er "4.200,00".
Avatar billede arne_v Ekspert
08. januar 2011 - 03:25 #7
Koden virker her med den værdi.

Prøv lige og check hvad der er i myReader.GetString(3).
Avatar billede arne_v Ekspert
03. marts 2011 - 03:41 #8
OK?
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

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