[PHP] Rekent niet verder dan 999.99

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sinds de Safe_mode functie van PHP aanstaat krijg ik een raar probleem.

Zodra ik een prijs of getal boven de 999.99 invoer springt hij automatisch naar 999.99 en gaat niet verder. Het lijkt wel of de duizendtallen niet meer ingevoerd kunnen worden. Ook bij een script berekening 100,00+1000,00 komt er als uitkomst 999.99.

Wie weet raad?

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Stop je deze invoer in een PHP variabele, of in een Mysql database?

Indien PHP var, hoe defineer je de variabele?
Indien Mysql, welk kolom-type gebruik je?

Laat eens wat code zien waarmee het probleem zich voordoet.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Stop je het eerst in een database oid, of doe je gewoon zoiets simpels als:
PHP:
1
2
3
4
5
$a = 100.00;
$b = 1000.00;

$c = $a + $b;
echo $c;

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat werkt wel goed, het gaat om een database koppeling. Kan het met dit te maken hebben

$prijs1 = ereg_replace(",",".",$prijs1);
$prijs2 = ereg_replace(",",".",$prijs2);

Vervolgens gaat dit stukje met een query insert de database in.

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Hoe zien je tabellen er uit, en dan met name de kolommen waar de prijzen in komen?

En voor regexen kan je sowieso beter preg gebruiken, en voor een simpele functie welk van komma's punten maakt, is str_replace voldoende. Beide oplossingen zijn vrijwel altijd sneller dan ereg* oplossingen.

[ Voor 5% gewijzigd door GX op 17-10-2005 13:37 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

het gaat om een database koppeling
Ah zeg dat dan ;) (staat niet voor niets in de quickstart dat je volledig moet zijn).

Het ligt 'm waarschijnlijk aan de eigenschappen van het veld in de database (waarin waarschijnlijk staat dat er maar 5 digits oid mogen zijn)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Hij zal wel een float(3,2) kolom gebruiken

[ Voor 17% gewijzigd door frickY op 17-10-2005 16:51 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee de tabel is niet float(3,2) dus daar ligt het niet aan:

id int(5) Nee
type_id int(3) Nee 0
periode_id int(2) Nee 0
prijs float(5,2) Nee 0.00
aantal char(2) Nee
status char(1) Ja B

Hierna volgt een scriptje waar de fout in voorkomt.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Laat me raden, het is die prijs

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Magic
  • Registratie: September 2001
  • Niet online
Verwijderd schreef op maandag 17 oktober 2005 @ 17:38:
prijs float(5,2) Nee 0.00
Hierna volgt een scriptje waar de fout in voorkomt.
prijs is dus 5 karakters lang, waarvan de punt 2 karakters van rechts verwijderd is :)

Steam: Brainfrz82 | PSN: Brainfrz | Discord: Brainfrz


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
.oisyn schreef op maandag 17 oktober 2005 @ 17:39:
Laat me raden, het is die prijs
5 digits, waarvan 2 decimals? :P
En dus niet 5 digits en 2 decimals

edit:

Damn you Magic :P

[ Voor 20% gewijzigd door RobIII op 17-10-2005 17:47 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hier zit ergens een fout in en daar gaat het ook verkeerd zodra de aantal * prijs boven de 1000 komt. Dan blijft hij op 999.99 haken.

PHP:
1
2
3
4
5
6
7
8
9
10
                if ($wijzig == 'aantal') {
                $sql_query01 = mysql_query("UPDATE winkelwagen SET aantal='$aantal' where id = '$ww_id';");
                $sql_winkel = mysql_query("SELECT * from winkelwagen where id = '$ww_id';");
                $result_winkel = mysql_fetch_array($sql_winkel);
                $prijs_perstuk = $result_winkel['bedrag'];
                $prijs_perstukmetbtw = $result_winkel['btw'];
                $totaalprijs_update = $aantal * $prijs_perstuk;
                $totaalprijsmetbtw_update = $aantal * $prijs_perstukmetbtw;
                $sql_update_prijs = mysql_query("UPDATE winkelwagen SET totaal_bedrag = '$totaalprijs_update' where id = '$ww_id';");
                $sql_update_prijsbtw = mysql_query("UPDATE winkelwagen SET totaal_btw = '$totaalprijsmetbtw_update' where id = '$ww_id';");

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dus je zegt:

float(10,2) en we kunnen weer een tijdje mee!!

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op maandag 17 oktober 2005 @ 17:47:
Dus je zegt:

float(10,2) en we kunnen weer een tijdje mee!!
Ja, of je baseert je float op de daadwerkelijke gegevens in plaats van maar wat uit je duim te zuigen als 10...Dan kun je net zo goed 8 of 21 pakken... (voor zover 21 mogelijk is that is)

[ Voor 12% gewijzigd door RobIII op 17-10-2005 17:49 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jullie zijn geweldig!! Echt top, wederom is mijn dank enorm en support ik jullie van harte.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gegeven het feit dat een float een 24 bits mantissa heeft, is het totaal aantal nuttige digits slechts 7

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
*hier stond onzin*

[ Voor 93% gewijzigd door RobIII op 17-10-2005 18:01 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 19:46
Als het om geld gaat, waarom niet gewoon een integer (bigint) en dan bij het tonen zelf de komma plaatsen.
Voorkomt afrondingsfouten.

Dus €5,12 opslaan als 512 en 452345 tonen als €4523,45

[ Voor 19% gewijzigd door jvdmeer op 17-10-2005 22:30 ]


Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 06:21
jvdmeer schreef op maandag 17 oktober 2005 @ 22:29:
Als het om geld gaat, waarom niet gewoon een integer (bigint) en dan bij het tonen zelf de komma plaatsen.
Voorkomt afrondingsfouten.

Dus €5,12 opslaan als 512 en 452345 tonen als €4523,45
euhm... hoe weet jij na het opslaan van je gegevens nog waar de , stond als ie er al heeft gestaan.

452345 kan € 4523,45 zijn maar ook € 452345,00

[ Voor 10% gewijzigd door Webgnome op 18-10-2005 08:35 ]

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 19:07

Reptile209

- gers -

Webgnome schreef op dinsdag 18 oktober 2005 @ 08:33:
[...]

euhm... hoe weet jij na het opslaan van je gegevens nog waar de , stond?

452345 kan € 4523,45 zijn maar ook € 452345,00
Als je alle bedragen consequent in centen invoert, staat de komma links van het tweede cijfer van rechts. Kan niet missen :). In jouw voorbeeld is dan dus het eerste antwoord goed.

[ Voor 15% gewijzigd door Reptile209 op 18-10-2005 08:38 ]

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
.oisyn schreef op maandag 17 oktober 2005 @ 17:59:
Gegeven het feit dat een float een 24 bits mantissa heeft, is het totaal aantal nuttige digits slechts 7
Sinds wanneer moet een database-float in een cpu-float opgeslagen zijn? :)
Toevallig geldt voor de float in de SQL-spec ongeveer hetzelfde stel regels als voor de cpu-float, maar verplicht is het niet om die dan een of een te mappen, bij de vergelijkbare decimal/numeric/number (andere namen voor min of meer hetzelfde beestje) is dat al helemaal niet het geval. MySQL slaat die zelfs als string op, als ik het me goed herinner.

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

ACM schreef op dinsdag 18 oktober 2005 @ 09:59:
[...]
MySQL slaat die zelfs als string op, als ik het me goed herinner.
Heb je daar aan bron voor? :) Ik kan het namelijk hier niet vinden.

[ Voor 46% gewijzigd door GX op 18-10-2005 10:05 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
GX schreef op dinsdag 18 oktober 2005 @ 10:02:
Heb je daar aan bron voor? :) Ik kan het namelijk hier niet vinden.
Ja, ik herinnerde het me blijkbaar goed :P
As of MySQL 5.0.3, DECIMAL and NUMERIC values are stored in binary format. Before 5.0.3, MySQL stores DECIMAL and NUMERIC values as strings, rather than in binary. One character is used for each digit of the value, the decimal point (if the scale is greater than 0), and the ‘-’ sign (for negative numbers). If the scale is 0, DECIMAL and NUMERIC values contain no decimal point or fractional part.

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Ok. Ik lees duidelijk weer te snel. Gelukkig zijn ze over :)

Dit gaat dus overigens niet op voor Integer neem ik aan.

Leuke topickaping..

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

ACM schreef op dinsdag 18 oktober 2005 @ 09:59:
[...]

Sinds wanneer moet een database-float in een cpu-float opgeslagen zijn? :)
Niet, maar mysql doet dat wel :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1