Vraag & Antwoord

Webprogrammeren & scripting

[PHP] Wat doet de operator %

24 antwoorden
  • Is was wel benieuwd wat ver verschil nu is tussen de operator % en / De % is iets met module ofzo? Maar begrijpen doe ik het niet. Wie wel? Alvast dank,
  • Als je alleen integere (gehele) getallen gebruikt dan is bijvoorbeeld 17/4=4 maar dan mis je de 1 die dus niet deelbaar is door 4 omdat de uitkomst kleiner is dan het kleinste gehele getal. Met 17%4=1 krijg je dus dit restgetal. Bijvoorbeeld makkelijk als je minuten in uren om wil zetten, 3500 minuten wordt dan 3500/60=58 en 3500%60=20. De uitkomst is dus 58 uur en 20 minuten.
  • Oftewel % is modulo / is delen
  • [quote:803539f755="DarkScribe"]17/4=4[/quote:803539f755]17/4 = 4.25 :wink:
  • [quote:f4fd404372="BelgiumBoy_007"]4.25[/quote:f4fd404372] Zijn dat Belgische [b:f4fd404372]gehele[/b:f4fd404372] getallen?
  • Hij geeft toch altijd een komma getal als uitkomst, ook al gebruik je gehele getallen ...
  • [code:1:6f78acbde9] int a; a = 17/4; echo a; [/code:1:6f78acbde9] uitkomst 4
  • [code:1:822ef063bd]<?php print (17/4); ?>[/code:1:822ef063bd]Geeft 4.25 met Apache op Windows :-?
  • Maar dat bereken je dan ook anders dan hoe Ruudfeen het doet...
  • [quote:1bec295463="BelgiumBoy_007"][code:1:1bec295463]<?php print (17/4); ?>[/code:1:1bec295463]Geeft 4.25 met Apache op Windows :-?[/quote:1bec295463] Op jouw manier verzint PHP zelf een type om de uitkomst in op te slaan. Dat type zal decimale getallen ondersteunen aangezien je een uitkomst krijgt met decimalen. Ik forceer PHP in mijn voorbeeld om de uitkomst als een integer op te slaan. Een integer ondersteunt geen decimale getallen, dus kan ie onmogelijk die laatst 0,25 opslaan. Die knipt ie er dus vanaf.
  • [quote:03ca911e93="Ruudfeen"]Op jouw manier verzint PHP zelf een type om de uitkomst in op te slaan. Dat type zal decimale getallen ondersteunen aangezien je een uitkomst krijgt met decimalen.[/quote:03ca911e93]Dat wist ik niet, weer iets bijgeleerd :wink:
  • ik vraag me af of de TS antwoord heeft op zn vraag :) zo niet, lees dan door :p module geeft in feite de rest van een staartdeling. Om maar verder te gaan met het voorbeeld van 17/4 [code:1:a60dd334df] 4 / 17 \ 4 16 - ---------- 1 [/code:1:a60dd334df] dus als je 17 % 4 uitvoert krijg je 1. Als je nog maar net bent begonnen met programmeren zal het vooral handig zijn om te kijken of getallen even of oneven zijn(bedenk zelf eens hoe ;)) en om te kijken of getallen deelbaar zijn door andere getallen :). Wat de discussie van 17/4 betreft, natuurlijk is 17/4 = 4,25 maar ruudfeen heeft in dit geval wel gelijk. In c++(wat ruudfeen gebruikt zo te zien) moet je variable van tevoren een type geven. Dus eerst declareren, en dan pas gebruiken. [code] int a; double b; a = 17/4; b= 17/4; [code] hierin zal a gelijk zijn aan 4 en b aan 4.25, terwijl je bij beide hetzelfde doet. Dat komt omdat a een interger is en b een double. In php worden variable on-the-fly gemaakt, zoals dat heet. Dat wil zeggen dat ze worden gemaakt wanneer er een waarde aan wordt toegekend. En kan er dus ook meteen het type bepaald worden. Daarom lever in php 17/4 in de gewone geval 4.25 op :)
  • [quote:50a0f6ad65="Dr HenDre"] vooral handig zijn om te kijken of getallen even of oneven zijn [/quote:50a0f6ad65] veel gebruikt om tabelrijen op deze manier afwisselende kleuren te geven: [code:1:50a0f6ad65]if ($id % 2 == 0) { //kleur 1 } else { //kleur 2 }[/code:1:50a0f6ad65]
  • ja, maar je controleert in feite of een tabelrij even of oneven is en daarvan uitgaande geef je het een kleur :) en om de code korter en netter te maken:) [code:1:480a41caeb] if(!($id % 2)) { //kleur1 } else { //kleur2 } [/code:1:480a41caeb]
  • [quote:9e5dd3bc75="Dr HenDre"]ja, maar je controleert in feite of een tabelrij even of oneven is en daarvan uitgaande geef je het een kleur :) [/quote:9e5dd3bc75] Er is toch ook niemand die anders beweerd? Ik begrijp je reactie niet. [quote:9e5dd3bc75="Dr HenDre"]en om de code korter en netter te maken:) [/quote:9e5dd3bc75] Persoonlijk zie ik overigens ook niet waarom jouw manier netter zou zijn (korter wel, maar dat verschil is te verwaarlozen). Eigenlijk vind ik 'm alleen maar onduidelijker.
  • == 0 word in de prog wereld(iig bij c++ en php) als niet-nette code beschouwd. Want == 0 staat gelijk met de boolean false. En de int word tijdens het compilen gecast naar een bool. Netzoals dat er wordt gezegd dat het gebruiken van label's en goto's niet-nette code oplevert. Als je dit allemaal voor de lol doet maakt het natuurlijk geen kut uit, maar zodra je het "voor andere" gaat doen, gaat de waarde van je werk omlaag door het gebruik van bv goto's. Men prefereert loops boven goto's :) kan er ook niets aan doen :)
  • [quote:2add37eb44="Dr HenDre"]== 0 word in de prog wereld(iig bij c++ en php) als niet-nette code beschouwd. Want == 0 staat gelijk met de boolean false. En de int word tijdens het compilen gecast naar een bool. Netzoals dat er wordt gezegd dat het gebruiken van label's en goto's niet-nette code oplevert. Als je dit allemaal voor de lol doet maakt het natuurlijk geen kut uit, maar zodra je het "voor andere" gaat doen, gaat de waarde van je werk omlaag door het gebruik van bv goto's. Men prefereert loops boven goto's :) kan er ook niets aan doen :)[/quote:2add37eb44]Wat zijn goto's ? :-?
  • k had het eigenlijk over goto's in c++, in php bestaat dat niet. maar hier een voorbeel in c++ [code:1:e9822c2341] #include <iostream> using namespace std; int main() { int i=0; start: cout<<"Dit stuk begint bij start\n"; deel_twee: cout<<"Dit is het tweede deel\n"; einde: cout<<"Dit is het einde\n"; if(!i) { i++; goto deel_twee; } return 0; } [/code:1:e9822c2341] dit zal als uitvoer het volgende geven: Dit stuk begint bij start Dit is het tweede deel Dit is het einde Dit is het tweede deel Dit is het einde
  • Ik wilde nog zeggen dat het maar goed is dat je dat niet weet ;) Het gebruik van goto's is ernstig af te raden
  • Ik ben ff op vakantie geweest, maar ik snap het nu wel :) Bedankt!

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.