[php] probleem met round()

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
wie kan de onderstaande uitkomst verklaren?
code:
1
2
print round(17.955,2); print "<br />";
print round(112.455,2); print "<br />";


17.955 wordt 17.95
en 112.455 wordt 112.46

A smooth sea never made a skilled sailor


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Zet de mode eens handmatig: http://be2.php.net/round

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • gvdh
  • Registratie: December 2009
  • Laatst online: 13:54
Welke versie van PHP gebruik je? Ik krijg met PHP 5.3 de volgende output:
17.96
112.46


edit:
PHP:
1
echo $_SERVER['SERVER_SOFTWARE'], '<br />';

om de versie van PHP te bekijken.

[ Voor 32% gewijzigd door gvdh op 09-02-2010 09:15 . Reden: Aanvulling ]


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Versie 5.1.1 doet dit ook fout. Meen dat dit in versie 5.2.x gewijzigd is.
Bug is niet versieafhankelijk; onder Linux krijg je meestal wel de juiste waarde.

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
aha een bug, ja klopt ik heb versie PHP/5.2.0-8, de oplossing is dus upgraden naar 5.3.0..

A smooth sea never made a skilled sailor


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Fout? Voor zover ik kan zien is dit keurige nette bankers rounding gecombineerd met de 'ik parse de string zover als ik kan wanneer het een nummer zou moeten zijn' en het feit dat de punt in het engelse taalgebied als decimaal scheidingsteken wordt gezien.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Janoz schreef op dinsdag 09 februari 2010 @ 13:24:
Fout? Voor zover ik kan zien is dit keurige nette bankers rounding gecombineerd met de 'ik parse de string zover als ik kan wanneer het een nummer zou moeten zijn' en het feit dat de punt in het engelse taalgebied als decimaal scheidingsteken wordt gezien.
Waar zie jij een string? En bankers' rounding is afronden naar de dichstbijzijnde éven getal?
Thus, for example, +23.5 becomes +24, +22.5 becomes +22, -22.5 becomes -22, and -23.5 becomes -24. This variant of the round-to-nearest method is also called unbiased rounding, convergent rounding, statistician's rounding, Dutch rounding, Gaussian rounding, or bankers' rounding.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Shit. Dacht ik eindelijk wat php gedrag te kunnen verklaren, blijk ik toch zelf nog te slapen |:(. Dacht even dat er een nederlandse notatie werd gebruikt (de 3 decimalen deden mij compleet de missende quotes negeren) en bij verschillend afronden bij even ( 4 ) en oneven ( 9 ) schoot ik automatisch in de bankers rounding pavlov.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Komt toch gewoon doordat floats niet altijd even nauwkeurig zijn, daar is een hoop info over te vinden zowel hier op GoT als op google.
Pagina: 1