[PHP] Afronden op 5 cent

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BD1
  • Registratie: Augustus 2009
  • Laatst online: 17-09 22:10
Ik moet bedragen afronden op 5 cent. Een paar voorbeelden:
  • €8,12 wordt afgerond naar €8,10
  • €8,13 wordt afgerond naar €8,15
In PHP bestaat wel een functie die afrond (nl. round()), maar deze is volgens mij niet bruikbaar, want ik wil afronden op 5 cent. Afronden op 10 cent had bijvoorbeeld wel gekund in PHP m.b.v. round().

Bestaat er in PHP toevallig hier een functie voor? Of heeft iemand toevallig een andere oplossing?

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 13:41

CoolGamer

What is it? Dragons?

Vermenigvuldigen met 2, afronden met round, daarna weer delen met 2.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

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

Snake

Los Angeles, CA, USA

Je kan dat zelf ook doen.

Maal 10 doen, kijken of het laatste getal <= 2 is, dan zet je het laatste getal op 0.
Als laatste getal >= 3 en <= ? dan laatste getal op 5.
En anders als het >= ? dan laatste getal op 0 en totale getal + 0.1.

En dan weer delen door 10 :)

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


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 17-09 17:56
Bestaat (nog) geen PHP functie voor :P

Maar met mod 5 kan je de 2 / 3 eruit halen, dan bij =< 2 die eraf trekken. >= 3 moet je 5 - modulo erbij optellen en je bent er ook ;)

code:
1
2
3
modulo = getal mod 5
if(modulo <= 2) return getal - module
if(modulo >= 3) return getal + (5 - modulo)


edit: spuit 11 8)7

[ Voor 30% gewijzigd door hostname op 11-03-2010 20:07 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

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!

  • sjorsjuhmaniac
  • Registratie: Februari 2009
  • Laatst online: 14:22
ik heb m zo gevonden: klik

1e link van devshed geeft je een oplossing in 1 regel, zonder moduli enz.

[ Voor 32% gewijzigd door sjorsjuhmaniac op 11-03-2010 20:17 ]


Acties:
  • 0 Henk 'm!

  • BD1
  • Registratie: Augustus 2009
  • Laatst online: 17-09 22:10
Zo dat zijn pas snelle reacties!
TheCoolGamer schreef op donderdag 11 maart 2010 @ 20:03:
Vermenigvuldigen met 2, afronden met round, daarna weer delen met 2.
Ik heb bovenstaande oplossing gebruikt, deze leek mij het handigst. De code wordt dan als volgt:
PHP:
1
2
3
$bedrag = 2.37;
$bedragmaal2 = 2 * $bedrag;
$bedragafgerond = round($bedragmaal2,1) / 2;

[ Voor 19% gewijzigd door BD1 op 12-03-2010 15:31 ]


Acties:
  • 0 Henk 'm!

Verwijderd

BigDrummer1 schreef op vrijdag 12 maart 2010 @ 09:10:
Zo dat zijn pas snelle reacties!

[...]

Ik heb bovenstaande oplossing gebruikt, deze leek mij het handigst. De code wordt dan als volgt:
PHP:
1
2
3
$bedrag = 2.37;
$bedragmaal2 = 2 * $bedrag;
$bedragafgerond = round($bedragmaal2,1) / 2;
Dat is de oplossing, maar kan nog een regeltje korter:
PHP:
1
2
$bedrag = 2.37;
$bedragafgerond = round($bedrag * 2, 1) / 2;

;)

Acties:
  • 0 Henk 'm!

Verwijderd

Je hebt het over geld. Werk niet met floats, werk met integers, dus alleen in hele centen.
En 1 of 2 cent moet je niet naar beneden afronden.

Kortom:
PHP:
1
min ( 5, round ( $centen / 5 ) * 5 )

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 13:55

Sebazzz

3dp

Verwijderd schreef op vrijdag 12 maart 2010 @ 23:59:
Je hebt het over geld. Werk niet met floats, werk met integers, dus alleen in hele centen.
En 1 of 2 cent moet je niet naar beneden afronden.
Of een fixed point getal wat PHP helaas niet heeft.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Effe in JS, maar in php het zelfde, maar waarom niet gewoon simpel zo?
code:
1
2
var v = 2.53;
alert(   Math.round(v * 20) / 20 );

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Guillome schreef op zaterdag 13 maart 2010 @ 00:18:
Effe in JS, maar in php het zelfde, maar waarom niet gewoon simpel zo?
code:
1
2
var v = 2.53;
alert(   Math.round(v * 20) / 20 );
Hoe precies is dat anders dan de oplossing die hij al had? Afgezien van die betekenisloze factor 10? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Dit lijkt me korter dan bovengenoemde oplossingen..
Round(v * 2) / 2 zou hij afronden op 50 cent.

[ Voor 48% gewijzigd door Guillome op 13-03-2010 12:19 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Guillome schreef op zaterdag 13 maart 2010 @ 12:19:
Dit lijkt me korter dan bovengenoemde oplossingen..
Round(v * 2) / 2 zou hij afronden op 50 cent.
round(2.53 * 2, 1) / 2
round(5.06, 1) / 2
5.1 / 2
2.55

round(2.53 * 20) / 20
round(50.6) / 20
51 / 20
2.55

:?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Aha ;) Je had hieruit zelf ook wel kunnen opmaken dat ik de optionele parameter van Round in PHP nog niet kende ;)

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Sebazzz schreef op zaterdag 13 maart 2010 @ 00:12:
[...]

Of een fixed point getal wat PHP helaas niet heeft.
Een int is een fixed point getal :P

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!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Guillome schreef op zondag 14 maart 2010 @ 02:53:
Aha ;) Je had hieruit zelf ook wel kunnen opmaken dat ik de optionele parameter van Round in PHP nog niet kende ;)
Dat wist ik al vanaf het begin ja, maar dit leek me leerzamer. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Grr irritante pappa :P

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router

Pagina: 1