Beste,

Ik heb een probleem met het volgende.
door wat google heb ik van onderstaande script iets geknutseld.
nu zou ik eigenlijk een bedrag willen krijgen aantal uren afgerond op 15min x bedrag

 $datetime_1 = $row["tijd1"]; 
                  $datetime_2 = $row["tijd2"];
            
               
                 
                    $from_time = strtotime($datetime_1); 
                    $to_time = strtotime($datetime_2); 
                    //$diff_minutes = round(abs($from_time - $to_time) / 60,2) ." min";
                    echo ' Totale tijd ' ;
                    $hours = round (abs($to_time - $from_time) / 3600,2);
                    
                    
                   
                   
                    echo number_format((float)$hours ,2, ','. '');
                    echo ' uur'; 
Zoiets wordt het dan.

<?php
$datetime_1 = "12:00";
$datetime_2 = "12:40";
$from_time = strtotime($datetime_1);
$to_time = strtotime($datetime_2);

$hours = round(abs($to_time - $from_time) / 3600, 2); // Aantal uren berekenen

// Aantal uren afronden naar het dichtstbijzijnde kwartier
$rounded_hours = round($hours * 4) / 4; // Afronden op 15 minuten
$bedrag_per_uur = 10; // Aanpassen naar jouw uurtarief

// Bereken het bedrag op basis van het afgeronde aantal uren en het bedrag per uur
$bedrag = $rounded_hours * $bedrag_per_uur;

echo 'Totale tijd: ' . number_format($rounded_hours, 2, ',', '') . ' uur (' . $hours . ' uur)';
echo '<br>';
echo 'Bedrag: €' . number_format($bedrag, 2, ',', '.') ;
?>
Dag Ariën,

We gaan het proberen, alvast bedankt.
bovenstaande werkt goed.

Nu heb ik het volgende

Graag zou ik de km ook willen uitrekenen dat lukt alleen krijg ik eem . ipv , en heb niet altijd 2 decimalen.

als ik deze heb wil ik als ze appart weer gegeven hebben en daarna ook bij elkaar op geteld

en hoe kan ik dit het beste in de database opslaan?

[size=xsmall]Toevoeging op 09/01/2024 07:05:52:[/size]

ik was de code vergeten toe te voegen

[code]
<div class="col">

<b> Aantal KM:</b>
<br>
<?php echo $row["aantal_KM"];?>
<br><br>
€ <?php echo $row["aantal_KM"] * $KM;?>
<!-- <?php $KM = $row["aantal_KM"] ?>;
<?php echo number_format((float)$KM, 2, ',', ' . '); ?> // Outputs -> 105.00?> -->
</div>
[code]
Als je echt exacte getallen nodig hebt, bijvoorbeeld met financiële berekeningen moet je floating point zoveel mogelijk zien te vermijden of in ieder geval begrijpen hoe het werkt en wat de limitaties zijn:
- https://www.php.net/manual/en/language.types.float.php
- https://floating-point-gui.de/
- https://docs.python.org/3/tutorial/floatingpoint.html
In de weergave rond je wel af via number_format() maar intern zijn floating point getallen niet precies.

(waarschuwing: de volgende alinea bevat een korte rant)
Vanwege de weak typing zet PHP automatisch integers om naar floating point ook als je dat niet verwacht. Maar gelukkig kan je daar dan unit tests voor schrijven. Die tests dien je ook minimaal elke 2 a 3 te herzien wanneer er weer nieuwe backward incompatibility changes worden geïntroduceerd met een nieuwe PHP-versie. En de belofte blijft dat PHP daarmee allemaal steeds beter wordt.

In ieder geval zou ik alle exacte berekeningen in de database laten doen ("in-database processing"), daar staan meestal toch alle getallen al, en om die nou eerst naar PHP te halen voor een berekening om ze vervolgens weer op te slaan kost onnodig veel I/O. In de database is veel sneller. Sla getallen op als DECIMAL.

Wil je toch in PHP rekenen met exacte getallen, gebruik dan een extentie, bijvoorbeeld BCMath. Het kan alleen zijn dat je daarvoor de PHP-configuratie op de server moet wijzigen.
- https://www.sitepoint.com/arbitrary-precision-big-numbers-php

Reageren