Avatar billede suppenudel Nybegynder
11. juli 2011 - 11:49 Der er 6 kommentarer og
1 løsning

Konvertere streng-beløb til tal

Hej,

Jeg skal lave en rettelse i et much too old system skrevet i ASP. Jeg skal trække et euro-beløb ud af en database og omregne det til kr. Beløbet ligger rigtig fint gemt i et notatfelt og bliver trukket som en streng i formatet: "€ 3.402"

Er der nogen der har en hurtig idé til hvordan man kan konvertere dette til type der er til at arbejde med, altså til et tal.

Jeg har prøvet noget á la:

Dim s
s = cDbl("€ 3.402")

Men euro-tegnet giver fejl ved konverteringen.

Mvh.
Avatar billede softspot Forsker
11. juli 2011 - 12:08 #1
Du kunne evt. klare det ved at fjerne eurotegnet og så konvertere det der er tilbage af tallet til en double. Alternativt kunne du hente tallet ud med et regulært udtryk.

Spørgsmålet er om du er 100% sikker på hvilket format tallet ligger i (og er det så det samme format hver gang ;-))?

Første metode kunne se nogenlunde således ud:

tal = replace(mid("€ 3.402", 3), ".", "")
dblTal = cdbl(tal)

Jeg antager her at punktum er tusindskild og ikke decimalkomma. Hvis det er decimalkomma, så skal du fjerne kaldet til replace.

Jeg er ikke helt sikker på løsningen med det regulære udtryk, så den vil jeg ikke fedte med at vise et eksempel på :-)
Avatar billede suppenudel Nybegynder
11. juli 2011 - 12:37 #2
Hej Softspot - tak for dit svar. Jeg har selv haft nogenlunde det samme i tankerne, men problemet er at det ikke er sikkert det står i dette format - det er virkelig uhandy't!

Så enten, som du er inde på, skal jeg ekstrahere alle tal fra strengen - via en RegEx - eller simpelthen omdanne data-kolonnen til en double, så den er til at arbejde med.
Avatar billede softspot Forsker
11. juli 2011 - 12:50 #3
At omdanne kolonnen til en datatype der passer til indholdet er klart at foretrække, men det er jo ikke sikkert at det er ligetil at konvertere data, når nu der ikke er garanti for at formatet er det samme for hver række... men det ville helt klart være bedre for robustheden af koden, hvis formatet var fast og af den korrekte type.
Avatar billede softspot Forsker
11. juli 2011 - 13:09 #4
Du kan prøve om denne løser den umiddelbare opgave:

function getAmount(src)
  dim rx, m
 
  set rx = new RegExp
  rx.Multiline = true
  rx.Pattern = "[\d\.]+"

  set m = rx.Execute(src)
  if m.Count > 0 then
    getAmount = m(0)
  else
    getAmount = 0
  end if
end function

Nedenstående kan bruges som udgangspunkt for at teste funktionen med reelle strenge fra databasen:

Response.Write getAmount("€ 3.402 osdlsdf") & "<br>"
Response.Write getAmount("3.412 osdl 23 sdf") & "<br>"
Response.Write getAmount("3.422") & "<br>"
Avatar billede suppenudel Nybegynder
11. juli 2011 - 13:52 #5
Hehe.. det er faktisk lige præcis sådan et script der som løser mit problem. Det er ikke god kodeskik, men det er heldigvis ikke en netbank jeg sidder og koder :-)

Jeg tror jeg går videre med det, i stedet for at begynde at rode ved databasen. Det er super at sidde og rette i noget 10 år gammelt kode man ikke selv har skrevet!

Du må gerne lægge et svar Softspot :-)
Avatar billede softspot Forsker
11. juli 2011 - 13:57 #6
Velbekomme :-)
Avatar billede suppenudel Nybegynder
11. juli 2011 - 14:29 #7
Tak for hjælpen!
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