2016-07-25 3 views
2

Dans AngularJS, j'essaie de déterminer combien d'heures, pour un travailleur actuel, sont standard par rapport aux heures supplémentaires. J'ai une formule qui fonctionne bien, si les heures sont des nombres entiers, mais échoue si elle a des nombres décimaux.utiliser parseFloat lors de la vérification des valeurs NULL

Je dois tenir compte des situations où l'un des numéros n'a peut-être pas été fourni. Ceci est mon approche actuelle:

laborItem.StraightHours = (parseFloat((laborItem.HoursB4Today | 0)) + parseFloat(laborItem.Hours | 0)) < 40 ? 
        (parseFloat(laborItem.Hours | 0)) : 
        40 - parseFloat(laborItem.HoursB4Today | 0); 

Cela ne renvoie que des heures entières.

J'ai aussi essayé:

laborItem.StraightHours = (parseFloat((laborItem.HoursB4Today | 0).toFixed(2)) + parseFloat(laborItem.Hours | 0).toFixed(2)) < 40 ? 
        (parseFloat(laborItem.Hours | 0).toFixed(2)) : 
        40 - parseFloat(laborItem.HoursB4Today | 0).toFixed(2); 

Mais, cela ajoute juste deux décimales. J'ai besoin de conserver les valeurs décimales.

Comment modifier ma formule pour que cela fonctionne? Et, ai-je vraiment besoin d'utiliser parseFloat du tout, ou y a-t-il un autre/meilleur moyen?

Répondre

1

Vous pouvez essayer le code suivant

laborItem.HoursB4Today = parseFloat(laborItem.HoursB4Today || 0); 
laborItem.Hours = parseFloat(laborItem.Hours || 0); 
laborItem.StraightHours = (laborItem.HoursB4Today + laborItem.Hours) < 40 ? laborItem.Hours : 40 - laborItem.HoursB4Today; 

Je viens de code modifié peu mais cela peut faire en sorte que l'utilisation future des variables (HoursB4Today, Hours) de laborI tem garantit qu'elles pointent vers des valeurs numériques. Vous n'avez pas besoin de les analyser encore et encore.

3

Je suppose que vous préférez utiliser || au lieu de | dans par exemple. Un seul tuyau est l'opérateur OU bit à bit et «convertit» vos nombres - s'ils existent - en nombres entiers. Le || est généralement utilisé pour fournir une valeur par défaut dans le cas où le premier opérande est évalué à false.

Donc, essayez de changer les expressions comme

laborItem.HoursB4Today | 0 

dans

laborItem.HoursB4Today || 0 
+0

Je vais devoir essayer cela et voir. – davids