WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Decimaler i PHP (https://www.wn.se/forum/showthread.php?t=1043106)

Andreas 2010-07-29 17:05

Decimaler i PHP
 
Vill mata in data i ett double-fält i databasen och vill då först kolla så att det är ett giltigt tal med decimaler (komma).
Tex skall 12,50 vara ett giltigt tal.

Använder checken is_numeric för att kolla detta, men denna funktion använder sig av . som separator och funkar således ej.
Har även testat att i början av scriptet sätta:
setLocale(LC_NUMERIC,'sv');
Men inte heller det ger önskar resultat.

Någon lösning?

Tack!

Andreas

vco-systems 2010-07-29 17:47

Byt ut alla ',' i strängen mot '.' innan du testar.
Fungerar ',' att använda vid lagring i databasen? Annars måste du ju i alla fall byta skiljetecken.

qson 2010-07-30 11:05

Citat:

Ursprungligen postat av vco-systems (Inlägg 20363864)
Byt ut alla ',' i strängen mot '.' innan du testar.
Fungerar ',' att använda vid lagring i databasen? Annars måste du ju i alla fall byta skiljetecken.

Kan nästan garantera att kommatecken inte funkar som decimalseparator i databasen.

KarlRoos 2010-07-31 12:00

$tal = (double) str_replace(',', '.', $tal);

tartareandesire 2010-07-31 14:40

Vill du absolut använda det svenska skrivsättet även vid lagring så får du köra det som text men det är sällan en bra idé. Annars är det alltid punkt som gäller för decimalavgränsning.

Jine 2010-08-01 00:03

Borde inte:
http://se2.php.net/manual/en/function.number-format.php

kunna lösa det? :)

qson 2010-08-04 22:53

Citat:

Ursprungligen postat av Jine (Inlägg 20364059)

number_format används vid utskrift för att formatera som ett "tal", med tusentalsavgränsare och decimalkomma osv.
PHP och MySQL hanterar dock bara punkt som decimalavgränsare.
Alltså får man hela tiden konvertera från komma till punkt när man läser input från användaren, och från punkt till komma när man presenterar (skriver ut) till användaren.
PHP-kod:

function toInt($s) {
  return (float) 
preg_replace(array('#,#','/[^0-9.-]/'),array('.',''),$s);
}
function 
toString($i) {
  return 
number_format($i,2,',',' ');   




Alla tider är GMT +2. Klockan är nu 00:55.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson