Avatar billede nemlig Professor
23. august 2009 - 16:05 Der er 15 kommentarer og
1 løsning

Beløbsformatering - Fra dansk til engelsk og modsat

Jeg har nogle inputfelter, hvor der skal angives beløb i danske kroner.
Men da jeg gemmer i MySQL's decimal-type, skal jeg konvertere tallet til engelsk, når jeg gemmer.
Og når jeg på en tilpasningsside skal give mulighed for at rette beløbene, henter jeg fra MySQL og konverterer derfor fra engelsk til dansk.

Nogen der har nogle effektive funktioner.

Jeg har disse, men specielt dansk-engelsk virker ikke perfekt.
Fx vil indtastning 9.00 resultere i 900,00

Fra Dansk til engelsk
function da_en($konverter_da_en){
$konverter_da_en = str_replace(".", "", $konverter_da_en);
$konverter_da_en = mysql_real_escape_string(str_replace(",", ".", $konverter_da_en));
return $konverter_da_en;
}

Og fra engelsk til Dansk:
$timeloen = number_format($timeloen, 2, ',', '.');
Avatar billede Slettet bruger
23. august 2009 - 16:13 #1
Du kan da sagtens have dine fulde beløb i databasen, det eneste du skal er at replace komma med punktum?
Avatar billede nemlig Professor
23. august 2009 - 16:20 #2
Jeg tror vi misforstår hinanden. Jeg fjerner jo netop tusindtalsseperatoren og bytter om på . og ,.
Se min funktion ovenfor, hvor jeg gør det.
Problemet er, at hvis der fx. skrives 9.00, så vil det resultere i 900.
Avatar billede showsource Seniormester
23. august 2009 - 16:44 #3
Forstår ikke lige,
"str_replace(".", "", $konverter_da_en);"
Du erstatter jo punktum med ingenting ?
Avatar billede showsource Seniormester
23. august 2009 - 16:45 #4
Og du skal vel kun erstatte evt. komma med punktum ?
Så vil jeg tro at preg_replace er din ven :O)
Avatar billede nemlig Professor
23. august 2009 - 16:49 #5
#3
Jeg fjerner jo tusindtalsseperatoren, inden jeg bytter om på komma og punktum.

Hvis der fx. er indtastet dette beløb: 14.255,45

Så fjerner jeg først punktum, så det er: 14255,45
Derefter ændrer jeg komma til punktum, så det er 14255.45
Herved har jeg ændret fra dansk til engelsk og kan gemme korrekt i MySQL.

Hvis jeg ikke fjerner punktum først, så vil tallet være 14.255.45
Og det er jo ikke valid.
Avatar billede Slettet bruger
23. august 2009 - 17:07 #6
Jeg er helt enig med dig i at vi misforstår hinanden ;-)
Og nu er jeg tydeligvis MEGET forvirret.

Du siger: "hvis der fx. skrives 9.00, så vil det resulterer i 900"

Og så tænker jeg, det er da forkert at skrive 9.00, når du fortæller det man skriver i input feltet er dansk format, altså ville det rigtige være 9,00 hvis det er 9kr du mener.
Det du gør lige nu er at du kører 9.00 igennem din funktion, først fjerner du alle punktummer og bagefter udskifter du kommaerne med punktummer. Så 9.00 bliver til 900, og så sker der ikke mere.
Avatar billede nemlig Professor
23. august 2009 - 17:40 #7
#6 Koden til at konvertere fra dansk til engelsk virker perfekt, så længe der indtastes efter danske regler. Fx 12.455,45 eller 900,45 eller 900 virker fint.

Jeg vil bare gerne have mit script til at fange nogle fejlmuligheder, hvis der indtastes forkert fra brugerens side.

Fx hvis brugeren indtaster efter engelske regler vil 9.00 resultere i 900, og 900.00 vil resultere i 90000.
Eller ved en simpel indtastningsfejl, vil 9.000.00 resultere i 900000.

Jeg kan selvfølgelig fange nogle fejl med noget php-validering.
-Hvis der er sat et punktum, så skal der altid være 3 tal bagefter.
-Der må ikke være 2 punktummer i tallet
-Osv.

Jeg vil bare høre jeres erfaringer.
Jeg har nok ikke beskrevet det tydeligt nok, da tråden har fået en hel anden drejning end ønsket.
Beklager forvirringen.
Avatar billede showsource Seniormester
23. august 2009 - 17:51 #8
Det nemmeste må vel være validering på brugerinput ?
Altså, eneste punktum/komma, må kun komme før de sidste to cifre
Avatar billede showsource Seniormester
23. august 2009 - 17:52 #9
Evt. lade formularen dele sig over to felter, hele beløb og komma beløb, og derfor INGEN punktum eller komma
Avatar billede Slettet bruger
23. august 2009 - 19:34 #10
Quote "Jeg har nogle inputfelter, hvor der skal angives beløb i danske kroner."

Når jeg læser ovenstående quote så forstår jeg ikke helt hvorfor du overhovedet gider bekymrer dig om de problemer du beskriver :)
Men hvis du vil have systemet til at virke med 'engelske' beløb også, så ville jeg også lave nogle forholdsregler under valideringen af beløbet ligesom showsource og du selv har nævnt.
Avatar billede webweaver Praktikant
23. august 2009 - 19:54 #11
Du bør bare lave et regex som checker op på placeringen af punktum og komma og antal af dem. En validering som der er nævnt :)
Avatar billede nemlig Professor
23. august 2009 - 20:04 #12
#10 Jeg vil gerne eliminere fejlmulighederne, og da jeg ikke er 100% befaren i PHP, kunne det være, at der fandtes nogle andre oplagte løsninger.

Systemet skal IKKE virke med engelske beløb, men jeg er nødt til at konvertere dem fra dansk til engelsk, når jeg gemmer i MySQL.

Jeg konkluderer nu, at jeg kan lave nogle ekstra valideringer.
Har I et bud på, hvordan jeg sikrer, at der ikke er 2 punktummer i beløbet, og hvis der er sat et punktum, så skal der være 3 cifre efter det.
Avatar billede nemlig Professor
12. september 2009 - 22:48 #13
lukketid - send et svar og jeg fordeler pointene.
Avatar billede showsource Seniormester
13. september 2009 - 07:08 #14
Jeg hopper over
Avatar billede webweaver Praktikant
13. september 2009 - 10:32 #15
Ja også her. Der kom aldrig rigtig en løsning.
Avatar billede nemlig Professor
19. oktober 2009 - 08:42 #16
Jeg kan oplyse, at jeg har lavet en løsning med javascript, som tilpasser det indtastede, når feltet forlades.
Jeg anvender dog fortsat PHP.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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