2010-07-14 4 views
1

Je lisais que vous devez être prudent avec les comparaisons à virgule flottante et les calculs en PHP. Je ne suis pas un expert en PHP alors j'ai pensé que je demanderais à la communauté quelle est la meilleure façon de faire des calculs décimaux précis en PHP.PHP Calculs décimaux

Je suis en train de développer une application de carte de pointage où elle calcule tout le temps entré pour la semaine. Tout dépassement de 40 heures est considéré comme du temps supplémentaire. Je veux ensuite distribuer ce temps supplémentaire à travers chaque entrée de temps en fonction du pourcentage que l'entrée est de la durée totale.

Exemple:

lundi = 10 heures
Temps total = 50 heures
total des heures supplémentaires = 10 heures

pourcentage du temps total (0,2) = lundi (10 heures)/Durée totale (50 heures)
heures supplémentaires à Allouer au lundi (2 heures) = total des heures supplémentaires (10 heures) * Pourcentage du temps total (0,2)

maintenant faire une nouvelle entrée pour lundi avec 2 heures supplémentaires et soustrayez 2 heures de originale entrée.

Nouvelles entrées:
lundi (8 heures) = lundi - Heures supplémentaires à Allouer au lundi (2 heures)
lundi Heures supplémentaires = 2 heures

Les choses ne semblent pas mauvais lorsque vous utilisez des entiers comme original entrées mais que se passe-t-il quand je commence à utiliser des flottants et que j'ai plusieurs entrées de temps par jour? Chaque fois qu'une entrée subira une partie du total des heures supplémentaires, je dois m'assurer de ne pas allouer plus d'heures supplémentaires et je dois également m'assurer que le temps total pour chaque jour et pour la totalité de la fiche est le même qu'à l'origine. entré. J'ai lu en comparant les flotteurs en php ne sont pas sûrs. Comment dois-je faire le calcul. (. ##) En outre, les numéros saisis finaux doivent être arrondi à 2 chiffres après la virgule

Répondre

1

Lire The Floating-Point Guide pour comprendre exactement pourquoi vous avez faire attention à mélanger des nombres à virgule flottante et le concept de "décimales" (qui n'a absolument rien à voir avec PHP spécifiquement). Il a également un cheat-sheet for PHP.

1

Vous pouvez utiliser des maths à virgule fixe. Ainsi, par exemple, si vos valeurs doivent être précises à un cent, utilisez un cent comme unité, puis vous pouvez utiliser la valeur 1234 pour représenter 12,34, et ainsi de suite.

Vous trouverez toujours que certains opérations, y compris la division, peuvent renvoyer une valeur en virgule flottante. Vous aurez juste à décider quoi faire avec le reste de toute façon. Par exemple, si vous avez 1,04 et que vous divisez cela par 5, le résultat devrait-il être 0,21 (arrondi au plus proche) ou 0,20 (arrondi à la baisse), etc. Puis convertir en entier en arrondi, plafond ou plancher.

+0

Dans le cas d'un OP, cela équivaut à calculer en minutes entières ou même en secondes, par rapport aux heures de virgule flottante –