Avatar billede saudoo Nybegynder
11. august 2012 - 17:49 Der er 8 kommentarer og
1 løsning

Punktum og komma i money

Hej eksperten,

Jeg sidder i en lidt underlig situation, hvor min lejede ms sql server returnerer money forkert. Enten det, eller min min ASP.Net side fortolker forkert.

Mit problem er i hver fald at f.eks. værdien: "30" i en tabel, bliver returneret som "30,0000", i stedet for f.eks. "30.0000". Det er jo hvad det er, men den hopper selv frem og tilbage mellem at bruge punktum eller komma, eller i hvert fald opfører den sig sådan.

Det betyder at jeg, når skal gange min værdi fra money, på min asp.net side, nogle dage kan få 30kr og andre gange 30.000kr returneret.

Har I et fif til hvordan jeg kan tjekke om den opfører sig anstændigt og ellers om der skal korrigeres for det og replace "," med "."
Avatar billede arne_v Ekspert
11. august 2012 - 20:30 #1
Angiv eksplicit culture naar du konverterer mellem decimal og string.
Avatar billede saudoo Nybegynder
11. august 2012 - 21:53 #2
Er datatypen money i string når det bliver trukket ud da? Jeg føler, at jeg lige så godt kunne have gemt mine beløb i float, med de problemer det skaber... selvom det ville have været noget snusk.

Hvordan kan jeg angive eksplicit culture for konverting mellem float og string? Er det bare som man ellers normalt sætter en global culture i et asp.net projekt? Af en eller anden grund, vil en ændring via web.config ikke virke, så jeg ændrer currentCulture i BeginRequest via min global-fil.

Noget ala dette:
        Dim newCulture As CultureInfo = DirectCast(System.Threading.Thread.CurrentThread.CurrentCulture.Clone(), CultureInfo)
        newCulture.NumberFormat.CurrencyDecimalDigits = "."
        newCulture.NumberFormat.CurrencyDecimalSeparator = ""
        Thread.CurrentThread.CurrentCulture = newCulture


Nu ved jeg jo ikke om det virker da den ikke nødvendigvis brokker sig pt... :P
Avatar billede saudoo Nybegynder
11. august 2012 - 22:00 #3
Hov, mere ala:

        newCulture.NumberFormat.CurrencyDecimalDigits = "3"
        newCulture.NumberFormat.NumberDecimalDigits = "4"
        newCulture.NumberFormat.NumberGroupSeparator = ""
        newCulture.NumberFormat.NumberDecimalSeparator = "."


Naturligvis
Avatar billede arne_v Ekspert
12. august 2012 - 01:26 #4
Penge boer vare i NUMERIC/DECIMAL i databasen og automatisk konverteres til decimal i C#.

Og decimal's ToString og Parse metoder tager en CultureInfo som argument.
Avatar billede saudoo Nybegynder
12. august 2012 - 10:44 #5
Nu går der lige spørgejørgen i den. For dit svar er modtaget. :)

Hvorfor skal man bruge datatypen decimal i stedet for money? Jeg synes ikke umiddelbart det giver mening, ikke at bruge en datatype der er lavet til præcis det man skal putte i kolonnen.

Og hvis man angiver en global CultureInfo så behøver man vel ikke gøre det ved hvert parse/toString?
Avatar billede arne_v Ekspert
12. august 2012 - 16:12 #6
MONEY som type i databasen er helt fint.

Jeg naevnte DECIMAL/NUMERIC fordi de er i naesten alle databaser.

Men SQLServer har en dedikeret MONEY type.
Avatar billede saudoo Nybegynder
12. august 2012 - 16:18 #7
Ah fint fint. Så er vi heldigvis på samme side. :) Mange tak for hjælpen.

Smid et svar...
Avatar billede arne_v Ekspert
12. august 2012 - 16:27 #8
svar
Avatar billede arne_v Ekspert
12. august 2012 - 16:28 #9
Du kan selv om hvorvidt du vil satte cultur globalt eller per kald.

Jeg er generelt lidt skeptisk over globalt.

Men smag og behag.
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