Avatar billede doozerii Nybegynder
11. juni 2006 - 17:22 Der er 10 kommentarer

float, language settings (komma vs. punktum)

Hej

Jeg har lige en nød her.

Jeg arbejder på et php 5 + mysql 5.1 (på suse) projekt, og får pt. alle floats ud som 4.23 altså med et punktum som decimal seperator. Jeg vil hellere have 4,23, altså et komma.

Derfor prøvede jeg at sætte locales i php'en men dette gav ingen forskel.

Spørgsmålet er om man kan få MYSQL til at spytte et komma ud istedet for et punktum. Jeg har også forsøgt med DECIMAL(x,y) istedet for floats, hvilket heller ikke gav noget brugbart resultat.

Endvider vil jeg gerne vide effekten dels på eksisterende data, og dels på data der intastes (altså i en alm. html form).

pt. skal man bruge . når man indtaster tal, ellers ryger de ikke rigtigt ind i databasen.

Nogen gode bud?
Avatar billede arne_v Ekspert
11. juni 2006 - 21:28 #1
Jeg tror ikke at det er MySQL som styrer det der. Det må være PHP.

Så du skal nok lede efter en måde at få PHP til at udskrive med dansk
decimal komma.

NB: aldrig bruge FLOAT til penge - altid DECIMAL(12,2) eller lignende.
Avatar billede mclemens Nybegynder
12. juni 2006 - 01:21 #2
Avatar billede doozerii Nybegynder
12. juni 2006 - 08:02 #3
Eftersom MYSQL også har en form for support for forskellige lande/tegnsæt, burde det også være muligt at få den til at lave talformat der passer.
Mht. at bruge DECIMAL så har jeg prøvet det, og det ændrer intet. Den arbejder stadigt med . som decimal seperator.

Jeg er klar over at der findes funktioner i php til formattering af numre, men det drejer sig om en hel del kode, så jeg vil helst have sql'en til at lave konverteringen.
Kan det ikke lade sig gøre?
Avatar billede mclemens Nybegynder
12. juni 2006 - 08:20 #4
100,52 er jo ikke et tal for mysql da tal adskilles af .
- du kan selvfølgelig gemme dine tal som tekst strenge istedet
... men, når du så henter tallene kan du ikke udføre beregninger med dem ...

- men jeg ved ikke om det kan lade sig gøre, jeg ville bare nævne problemet ved
at gøre det... jeg har samme problem i mit købesystem, men hvis jeg ændrer
formatet jeg får leveret til php kan jeg ikke sammentælle kundens ordre...
Avatar billede doozerii Nybegynder
12. juni 2006 - 09:05 #5
Hm, her er noet jeg ikke helt kan gennemskue; Hvis 100,54 ikke er et tal for php, hvorfor kan den så skrive det ud på baggrund af en float hvis man beder den om at bruge dansk notation?

eks. fra:http://dk.php.net/setlocale
Be carefull - setting a locale which uses commas instead of dots in numbers may cause a mysql db not to understand the query:
<?php
setlocale(LC_ALL,"pl");
$price = 1234 / 100; // now the price looks like 12,34
$query = mysql_query("SELECT Id FROM table WHERE price='".$price."'");
?>
Even if there is a price 12.34 - nothing will be found

Der bør derfor være en eller anden form for overensstemmelse mellem phps locale og mysql's character set og collation. Eller har jeg misforstået noget?
Avatar billede mclemens Nybegynder
12. juni 2006 - 09:38 #6
Dunno... men når jeg læser ovenstående så er det en php configurering der gør at $price bliver til -> 12,34 efter at være divideret med 100 så sender den forespørgslen  til mysql ... mysql skal så indeholde en værdi i kollonnen price af formatet 12,34 og ikke 12.34 ... hvordan mysql kan indeholde det uden at price kolonnen er en streng ved jeg ikke... <- Har dog ikke testet det ...
Avatar billede arne_v Ekspert
12. juni 2006 - 12:55 #7
hvis MySQL sender en binær floating point til PHP, så kan MySQL ikke løse
problemet

og som mclemens har påpeget vil du få problemer med literale værdier i
SQL med brug af komma
Avatar billede doozerii Nybegynder
12. juni 2006 - 16:22 #8
Arne:
Det har du nok ret i. Dermed må det alså være et php problem. Jeg vil lure på det og måske oprette et spørgsmål i PHP forummet istedet.
Avatar billede arne_v Ekspert
06. oktober 2006 - 03:14 #9
skal vi så have afsluttet her ?
Avatar billede kirring Nybegynder
02. februar 2007 - 10:02 #10
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
Computerworld tilbyder specialiserede kurser i database-management

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