individuele maat/stuks berekening uit getal
Ik zit met een probleem.
Op mijn werk heb ik me aangeboden om een bestel formulier te maken voor hun producten ( ijzer handel).
Maar nu komt het.
Meestal worden er bepaalde lengtes gevraagd.
Voorbeeld:
Één koker is 6.00 meter lang.
De klant had graag 12 stukken van 1.60 meter (=19.20 meter).
Ik wil weten hoeveel kokers ik benodig, hoeveel stukken ik uit één koker haal, én hoeveel rest ik pér koker én als totaal over houd.
Ik ben alvast begonnen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?
/*
in dit voorbeeld gebruik ik
1.55 meter X 5 = 7.75 meter
Dit is 1.75 meer dan mogelijk is.
Het doel is om wanneer ik 2 X de koker van 6 meter neem.
De formule het totaal + de rest neemt.
En mij vertelt hoeveel stuks hij uit elke standaard lengte haalt en dus hoeveel lengtes ik nodig heb.
*/
$zaagsnede = 1550; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vastemaat = 6000; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vermenigvuldiger = 5; /* vermenigvuldiging $vermenigvuldiger X $zaagsnede */
$materiaalsoort = 'koker 50x50x3 | Standaard lengte: ' . $vastemaat .'MM<br /><br />';
echo $materiaalsoort;
$uitkomst = $vastemaat - $vermenigvuldiger * $zaagsnede;
$som = $vermenigvuldiger * $zaagsnede;
$berekening = $vastemaat . ' - '. $vermenigvuldiger . ' X ' . $zaagsnede . ' = ' . $som;
echo $berekening . '<br />';
if ($som < $vastemaat)
{ echo '<div style="color: green; font-weight: bold;">REST Materiaal ' . $uitkomst . 'MM</div>';
}else{
echo '<div style="color: red; font-weight: bold;">Maximale maat overschreden: ' . $uitkomst . 'MM</div>';
}
?>
/*
in dit voorbeeld gebruik ik
1.55 meter X 5 = 7.75 meter
Dit is 1.75 meer dan mogelijk is.
Het doel is om wanneer ik 2 X de koker van 6 meter neem.
De formule het totaal + de rest neemt.
En mij vertelt hoeveel stuks hij uit elke standaard lengte haalt en dus hoeveel lengtes ik nodig heb.
*/
$zaagsnede = 1550; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vastemaat = 6000; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vermenigvuldiger = 5; /* vermenigvuldiging $vermenigvuldiger X $zaagsnede */
$materiaalsoort = 'koker 50x50x3 | Standaard lengte: ' . $vastemaat .'MM<br /><br />';
echo $materiaalsoort;
$uitkomst = $vastemaat - $vermenigvuldiger * $zaagsnede;
$som = $vermenigvuldiger * $zaagsnede;
$berekening = $vastemaat . ' - '. $vermenigvuldiger . ' X ' . $zaagsnede . ' = ' . $som;
echo $berekening . '<br />';
if ($som < $vastemaat)
{ echo '<div style="color: green; font-weight: bold;">REST Materiaal ' . $uitkomst . 'MM</div>';
}else{
echo '<div style="color: red; font-weight: bold;">Maximale maat overschreden: ' . $uitkomst . 'MM</div>';
}
?>
1 koker = 6000mm
Aantal uit 1 rol 6000 / 1600 = 3 stuks
3 x 1600 = 4800 restand van 1 stuks 6m koker is dus een 1200mm
Je hebt dus 4 kokers van 6 meter nodig en je houdt dan over 4 kokers van 1200
Je doet er wel verstandig aan om alles eerst naar mm om te rekenen, maar dat had je volgens mij al in de gaten. (note je kan niet doen 12 x 1600 = 19200 / 6000 = 3.2 dat is wel 4 stuks van 6m, alleen weet je nu niet wat het restant per koker is want als je 4 x 6000 = 24000 - 19200 = 4800 en dat is dan 1 koker terwijl je in feite 4 x 1200 per 6m koker overhoud )
Bovenstaande mag je zelf in code uitdenken en verwerken
Dit is ook niet de topic: "plaats een script"(o.i.d)
Dit is de topic "aanvragen".
Afijn... kan een misverstand zijn.
Karl... Bedankt voor je links , alhoewel de eerste voor mij chinees is en ik in de 2de ( nog) niet mijn oplossing voorbij heb zien komen.
Ik ben meer van de appels tellen.
4/3 = 1.333333333
4%3 = 0.333333333
Link 2 zie ik zo snel de relevantie niet van...
Het is meer een vraag die je stelt dan dat je een verzoek doet om iets te scripten!!
Het was mijn intentie om uiteindelijk gezamenlijk tot een resultaat te komen, zodat straks iemand anders er ook iets aan had.
Vandaar ook mijn begin script ( ik moet toch ook mijn inzet tonen).
Anyway ik ben nu met de deel functie bezig maar er staan teveel getallen achter de decimaal.
Ik meende dat ik met de functie round() een decrease kon doen ( lukt nog ff niet.. ben nog opzoek naar het juiste formaat)
Je moet afronden naar boven en dat is ceil()
en in principe:
(4/3)-(4%3) = 1
Gewijzigd op 01/01/1970 01:00:00 door Noppes
Noppes schreef op 10.10.2008 23:00:
Link 2 zie ik zo snel de relevantie niet van...
Op wiki staat dat modulo operator teken % is, dan zoek je op php.net op wat dat nou is.
Helaas weten velen de % niet te vertalen naar modulo en ook niet modulo naar %. Je zal eerder mod() verwachten als functie zijnde
Hierdoor kwam ik op floor() uit.
simpel voorbeeld zou dan zijn ( let wel in dit minimale aantal):
Code (php)
Volgende stap ben ik mee bezig ... rest berekenen + aantal benodigde kokers
Gewijzigd op 01/01/1970 01:00:00 door Henry
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?
/*
in dit voorbeeld gebruik ik
0.35 meter X 500 = 175 meter
Nu alleen nog het REST materiaal berekenen pér lengte van 6 meter én de totale rest
*/
$zaagsnede = 350; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vastemaat = 6000; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vermenigvuldiger = 500; /* vermenigvuldiging $vermenigvuldiger X $zaagsnede */
$materiaalsoort = 'koker 50x50x3 | Standaard lengte: ' . $vastemaat .'MM<br /><br />';
echo $materiaalsoort;
$uitkomst = $vastemaat - $vermenigvuldiger * $zaagsnede;
$som = $vermenigvuldiger * $zaagsnede;
$berekening = $vastemaat . ' - '. $vermenigvuldiger . ' X ' . $zaagsnede . ' = ' . $som;
echo $berekening . '<br />';
if ($som < $vastemaat)
{ echo '<div style="color: green; font-weight: bold;">REST Materiaal ' . $uitkomst . 'MM</div>';
}else{
echo '<div style="color: red; font-weight: bold;">Maximale maat overschreden: ' . $uitkomst . 'MM</div>';
}
$verkrijgt = $vastemaat / $zaagsnede;
echo '<br />U verkrijgt <b>'. floor($verkrijgt) . '</b> stukken uit 1 lengte van ' . $vastemaat. 'MM';
$benodigd = $vermenigvuldiger - floor($verkrijgt);
if ( floor($verkrijgt) < $vermenigvuldiger){
echo '<br />U heeft nog <b>' . ceil($benodigd) . '</b> delen nodig';
}else{ 'ok';
}
$totaal = ceil($benodigd) / floor($verkrijgt);
echo ' <br />U heeft nog <b>' . ceil($totaal) . '</b> x ' .$vastemaat . 'MM nodig';
?>
/*
in dit voorbeeld gebruik ik
0.35 meter X 500 = 175 meter
Nu alleen nog het REST materiaal berekenen pér lengte van 6 meter én de totale rest
*/
$zaagsnede = 350; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vastemaat = 6000; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vermenigvuldiger = 500; /* vermenigvuldiging $vermenigvuldiger X $zaagsnede */
$materiaalsoort = 'koker 50x50x3 | Standaard lengte: ' . $vastemaat .'MM<br /><br />';
echo $materiaalsoort;
$uitkomst = $vastemaat - $vermenigvuldiger * $zaagsnede;
$som = $vermenigvuldiger * $zaagsnede;
$berekening = $vastemaat . ' - '. $vermenigvuldiger . ' X ' . $zaagsnede . ' = ' . $som;
echo $berekening . '<br />';
if ($som < $vastemaat)
{ echo '<div style="color: green; font-weight: bold;">REST Materiaal ' . $uitkomst . 'MM</div>';
}else{
echo '<div style="color: red; font-weight: bold;">Maximale maat overschreden: ' . $uitkomst . 'MM</div>';
}
$verkrijgt = $vastemaat / $zaagsnede;
echo '<br />U verkrijgt <b>'. floor($verkrijgt) . '</b> stukken uit 1 lengte van ' . $vastemaat. 'MM';
$benodigd = $vermenigvuldiger - floor($verkrijgt);
if ( floor($verkrijgt) < $vermenigvuldiger){
echo '<br />U heeft nog <b>' . ceil($benodigd) . '</b> delen nodig';
}else{ 'ok';
}
$totaal = ceil($benodigd) / floor($verkrijgt);
echo ' <br />U heeft nog <b>' . ceil($totaal) . '</b> x ' .$vastemaat . 'MM nodig';
?>
Nu alleen de rest nog berekenen
Niet bumpen. (Wat is bumpen?)
D'r staat daar aan de rechterkant zelfs een lijstje van wat de operator teken is per taal. En dan voornamelijk mod of % dus.
Noppes schreef op 10.10.2008 23:24:
Helaas weten velen de % niet te vertalen naar modulo en ook niet modulo naar %. Je zal eerder mod() verwachten als functie zijnde
D'r staat daar aan de rechterkant zelfs een lijstje van wat de operator teken is per taal. En dan voornamelijk mod of % dus.
waar hebben we het over?
Henry schreef op 11.10.2008 00:42:
Wat heeft het bumpen er nu weer mee te maken?.
waar hebben we het over?
waar hebben we het over?
Je post een nieuw bericht, om te melden dat je er bijna bent. Dit had je via een edit moeten doen. Om een edit te kunnen doen moet je op
![Afbeelding Afbeelding](http://phphulp.nl/imgs/forum/edit.gif)
Klik de links van Karl aan en je weet wat er bedoeld wordt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?
/*
in dit voorbeeld gebruik ik
3.30 meter X 397 = 1310.1 meter
Tevens wordt het REST materiaal berekend pér lengte van 6 meter én de totale rest
*/
$zaagsnede = 3300; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vastemaat = 6000; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vermenigvuldiger = 397; /* vermenigvuldiging $vermenigvuldiger X $zaagsnede */
$materiaalsoort = 'koker 50x50x3 | Standaard lengte: ' . $vastemaat .'MM<br /><br />';
echo $materiaalsoort;
$uitkomst = $vastemaat - $vermenigvuldiger * $zaagsnede;
$som = $vermenigvuldiger * $zaagsnede;
$berekening = $vastemaat . ' - '. $vermenigvuldiger . ' X ' . $zaagsnede . ' = ' . $som;
echo $berekening . '<br />';
if ($som < $vastemaat)
{ echo '<div style="color: green; font-weight: bold;">REST Materiaal ' . $uitkomst . 'MM</div>';
}else{
echo '<div style="color: red; font-weight: bold;">Maximale maat overschreden: ' . $uitkomst . 'MM</div>';
}
$verkrijgt = $vastemaat / $zaagsnede;
echo '<br />U verkrijgt <b>'. floor($verkrijgt) . '</b> stukken uit 1 lengte van ' . $vastemaat. 'MM<br />';
$benodigd = $vermenigvuldiger - floor($verkrijgt);
if ( floor($verkrijgt) < $vermenigvuldiger){
echo '<br />U heeft nog <b>' . ceil($benodigd) . '</b> delen nodig';
}else{ 'ok';
}
$totaal = ceil($benodigd) / floor($verkrijgt);
echo ' <br />U heeft nog <b>' . ceil($totaal) . '</b> x ' .$vastemaat . 'MM nodig<br /><br />';
$totaallengtes = floor($verkrijgt) + ceil($benodigd);
echo 'U heeft in totaal: <b>'. $totaallengtes . '</b> lengtes nodig<br /><br />';
$restperlengte = $vastemaat - floor($verkrijgt) * $zaagsnede;
echo 'rest per lengte--------->' . $restperlengte . 'MM<br /><br />';
$totalerest = $restperlengte * $vermenigvuldiger;
echo 'Totale rest bedraagt--------->' . $totalerest . 'MM';
?>
/*
in dit voorbeeld gebruik ik
3.30 meter X 397 = 1310.1 meter
Tevens wordt het REST materiaal berekend pér lengte van 6 meter én de totale rest
*/
$zaagsnede = 3300; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vastemaat = 6000; /* Getal in millimeter(s) (10 milimeter = 1 centimeter) */
$vermenigvuldiger = 397; /* vermenigvuldiging $vermenigvuldiger X $zaagsnede */
$materiaalsoort = 'koker 50x50x3 | Standaard lengte: ' . $vastemaat .'MM<br /><br />';
echo $materiaalsoort;
$uitkomst = $vastemaat - $vermenigvuldiger * $zaagsnede;
$som = $vermenigvuldiger * $zaagsnede;
$berekening = $vastemaat . ' - '. $vermenigvuldiger . ' X ' . $zaagsnede . ' = ' . $som;
echo $berekening . '<br />';
if ($som < $vastemaat)
{ echo '<div style="color: green; font-weight: bold;">REST Materiaal ' . $uitkomst . 'MM</div>';
}else{
echo '<div style="color: red; font-weight: bold;">Maximale maat overschreden: ' . $uitkomst . 'MM</div>';
}
$verkrijgt = $vastemaat / $zaagsnede;
echo '<br />U verkrijgt <b>'. floor($verkrijgt) . '</b> stukken uit 1 lengte van ' . $vastemaat. 'MM<br />';
$benodigd = $vermenigvuldiger - floor($verkrijgt);
if ( floor($verkrijgt) < $vermenigvuldiger){
echo '<br />U heeft nog <b>' . ceil($benodigd) . '</b> delen nodig';
}else{ 'ok';
}
$totaal = ceil($benodigd) / floor($verkrijgt);
echo ' <br />U heeft nog <b>' . ceil($totaal) . '</b> x ' .$vastemaat . 'MM nodig<br /><br />';
$totaallengtes = floor($verkrijgt) + ceil($benodigd);
echo 'U heeft in totaal: <b>'. $totaallengtes . '</b> lengtes nodig<br /><br />';
$restperlengte = $vastemaat - floor($verkrijgt) * $zaagsnede;
echo 'rest per lengte--------->' . $restperlengte . 'MM<br /><br />';
$totalerest = $restperlengte * $vermenigvuldiger;
echo 'Totale rest bedraagt--------->' . $totalerest . 'MM';
?>
Voor iedereen die er wat aan heeft , veel plezier ermee.
Grtzz wHiTeHaT
Gewijzigd op 01/01/1970 01:00:00 door Henry
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$a['kokerlengte'] = 600;
$a['benodigde_stukken'] = 397;
$a['benodigde_lengte'] = 330;
$a['rest_per_koker'] = $a['kokerlengte'] % $a['benodigde_lengte'];
$a['aantal_per_koker'] = ($a['kokerlengte'] - $a['rest_per_koker']) / $a['benodigde_lengte'];
$a['aantal_rest_stukken'] = $a['benodigde_stukken'] % $a['aantal_per_koker'];
$a['aantal_hele_kokers'] = ($a['benodigde_stukken'] - $a['aantal_rest_stukken']) / $a['aantal_per_koker'];
$a['rest_eindkoker'] = ($a['aantal_rest_stukken'] == 0) ? 0 : $a['kokerlengte'] - $a['aantal_rest_stukken'] * $a['benodigde_lengte'];
$a['totaal_kokers'] = ($a['aantal_rest_stukken'] == 0) ? $a['aantal_hele_kokers'] : $a['aantal_hele_kokers'] + 1;
echo 'Totaal benodigde kokers: '.$a['totaal_kokers'].'<br />
Aantal stukken per koker: '.$a['aantal_per_koker'].'<br />
Rest per koker: '.$a['rest_per_koker'].' cm </br />
Totaal rest: '.($a['rest_per_koker'] * $a['aantal_hele_kokers'] + $a['rest_eindkoker']).' cm.<br />
<br />
<pre>'.print_r($a, true).'</pre>';
?>
$a['kokerlengte'] = 600;
$a['benodigde_stukken'] = 397;
$a['benodigde_lengte'] = 330;
$a['rest_per_koker'] = $a['kokerlengte'] % $a['benodigde_lengte'];
$a['aantal_per_koker'] = ($a['kokerlengte'] - $a['rest_per_koker']) / $a['benodigde_lengte'];
$a['aantal_rest_stukken'] = $a['benodigde_stukken'] % $a['aantal_per_koker'];
$a['aantal_hele_kokers'] = ($a['benodigde_stukken'] - $a['aantal_rest_stukken']) / $a['aantal_per_koker'];
$a['rest_eindkoker'] = ($a['aantal_rest_stukken'] == 0) ? 0 : $a['kokerlengte'] - $a['aantal_rest_stukken'] * $a['benodigde_lengte'];
$a['totaal_kokers'] = ($a['aantal_rest_stukken'] == 0) ? $a['aantal_hele_kokers'] : $a['aantal_hele_kokers'] + 1;
echo 'Totaal benodigde kokers: '.$a['totaal_kokers'].'<br />
Aantal stukken per koker: '.$a['aantal_per_koker'].'<br />
Rest per koker: '.$a['rest_per_koker'].' cm </br />
Totaal rest: '.($a['rest_per_koker'] * $a['aantal_hele_kokers'] + $a['rest_eindkoker']).' cm.<br />
<br />
<pre>'.print_r($a, true).'</pre>';
?>
Edit:
En dat geeft in dit geval dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Totaal benodigde kokers: 397
Aantal stukken per koker: 1
Rest per koker: 270 cm
Totaal rest: 107190 cm.
Array
(
[kokerlengte] => 600
[benodigde_stukken] => 397
[benodigde_lengte] => 330
[rest_per_koker] => 270
[aantal_per_koker] => 1
[aantal_rest_stukken] => 0
[aantal_hele_kokers] => 397
[rest_eindkoker] => 0
[totaal_kokers] => 397
)
Aantal stukken per koker: 1
Rest per koker: 270 cm
Totaal rest: 107190 cm.
Array
(
[kokerlengte] => 600
[benodigde_stukken] => 397
[benodigde_lengte] => 330
[rest_per_koker] => 270
[aantal_per_koker] => 1
[aantal_rest_stukken] => 0
[aantal_hele_kokers] => 397
[rest_eindkoker] => 0
[totaal_kokers] => 397
)
Edit 2:
Grote voordeel is hier dat ik nergens afrond en er dus ook geen afrondingsfouten in voor kunnen komen.
Edit 3 & 4:
Code nog wat verbeterd
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
Je berekening klopt niet
1 koker = 6000 mm
Nodig 12 stukst van 1600mm
Je hebt dus 4 kokers nodig van 6000mm
en dan houd je 4 kokers van 1200mm over
Jouw uitkomst is:
array(8) {
["kokerlengte"]=>
int(6000)
["benodigde_stukken"]=>
int(12)
["benodigde_lengte"]=>
int(1600)
["rest_per_koker"]=>
int(1200)
["aantal_per_koker"]=>
int(3)
["aantal_rest_stukken"]=>
int(0) fout want je houd 4 kokers over van 1200mm
["aantal_hele_kokers"]=>
int(4) ????
["rest_eindkoker"]=>
int(6000) ????
}
"aantal rest stukken" is niet het totaal aantal rest stukken, maar het aantal rest stukken wat niet uit een vorige koker is gekomen.