Avatar billede justask Nybegynder
15. november 2005 - 17:35 Der er 6 kommentarer

formattering af float til kr/øre

Hejsa

Jeg ønsker at formattere et tal således at brugeren ser kroner og øre som "1.000,25", altså "." som tusind-sepparator og "," som decimal-sepparator. Ummidelbart burde flg. klare det:

setlocale(LC_ALL,'dk_DK');
money_format('%i', 1000.25);

Men det ser ikke ud til at hjælpe (får "1000.25" ud). Enten bruger jeg SetLocale(...) forkert eller også er det danske lokale ikke sat op på serveren. Er der andre smarte måder man kan lave denne formattering på eller skal jeg selv til at parse tallet?

Samme problem opstår når jeg skal modtage brugerens tal: jeg ønsker at kunne modtage brugerens tal formatteret på samme måde, enten som "1.000,25" eller "1000,25" og gemme det i min database (mysql). Jeg går ud fra man jeg reformatere det så der skrives "1000.25" (float-type) i databasen? Og det burde man vel kunne gøre med SetLocale(...) og money_format(...)? Så spørgsmålet er vel igen: Er der en smart måde at komme fra "1.000,25" eller "1000,25" til "1000.25" eller skal jeg parse strengen fra brugeren?

Og i fald jeg selv skal parse til og fra dansk økonomi-format, har I så nogen skudsikre måder?


Takker....
Avatar billede jakobdo Ekspert
15. november 2005 - 18:08 #1
Prøv number_format($number, 2, ',', '.');
2 = antal decimaler
, = decimal pointer
. = tusinde pointer

Læs evt selv mere på www.php.net/number_format
Avatar billede nielle Nybegynder
15. november 2005 - 18:26 #2
da_DK i stedet for dk_DK.
Avatar billede justask Nybegynder
16. november 2005 - 09:46 #3
Hejsa ... "da_DK" hjælper desværre ikke  :(  men number_format virker fint. Eneste problem er så at komme den anden vej, fra "1000,25" til "1000.25" som databasen ønsker det. Nogen ideer (eller skal jeg bare str_replace() "," med ".")?
Avatar billede nielle Nybegynder
16. november 2005 - 10:05 #4
Hvorfor er det et problem? Du skal kun opbevare tallene i et eneste format internt i programmet - nemlig som et tal og ikke som en string som tilfældigvis ligner et tal. Det er kun når du skriver ud til skærmen at du obverhovedet skal overveje om tallet skal formateres på en læsevenlig møde.

I øvrigt forstår jeg ikke helt hvorfor rettelsen til da_DK ikke virker - det er i hvert fald den rette form, men måske vil din PHP hellere have den som da-DK.
Avatar billede jakobdo Ekspert
16. november 2005 - 10:07 #5
På min box skal jeg bruge: da_DK.ISO_8859-1
Avatar billede justask Nybegynder
16. november 2005 - 10:21 #6
Det ser slet ikke ud til at setlocale(...) virker, flg. kode giver "******1000.25":

setlocale(LC_ALL,'da_DK.ISO_8859-1');
echo money_format('%=*(#10.2n', 1000.25);

Der er sikkert ikke kompileret andet end et lokale med i vores linux-server.

Nielle: Du har helt ret, internt vil jeg faktisk regne med øre så jeg helt slipper for decimaler, men jeg skal både vise priserne til brugeren og tage imod priser som skrives af brugeren. Så jeg skal kunne formattere både "1.000,25" og "1000,25" til "1000.25" - og jeg kan faktisk ikke være sikker på at brugeren skriver et komma, dvs. "1000" skal formatteres til "1000.00".

Men det lader til at jeg må ud i noget parser-helvedet?
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