Использовать parseFloat при проверке значений NULL

В AngularJS я пытаюсь выяснить, сколько часов для текущего работника являются стандартными и сверхурочными. У меня есть формула, которая хорошо работает, если часы целые числа, но не работает, если она имеет десятичные дроби.

Я должен учитывать ситуации, когда один из номеров, возможно, не был предоставлен. Это мой текущий подход:

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

Это возвращает только целые часы.

Я также попробовал:

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);

Но это просто добавляет два десятичных знака. Мне нужно сохранить десятичные значения.

Как мне изменить мою формулу, чтобы заставить это работать? И мне действительно нужно использовать parseFloat вообще или есть другой / лучший способ?

2 ответа

Решение

Вы можете попробовать следующий код

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

Я просто немного изменил ваш код, но это может гарантировать, что будущее использование переменных (HoursB4Today,Hours) из LaborItem гарантирует, что они указывают на числовые значения. Вам не нужно анализировать их снова и снова.

Я думаю, вы скорее хотите использовать || вместо | в например laborItem.HoursB4Today | 0

Один канал - это побитовый оператор ИЛИ, который "конвертирует" ваши числа - если они существуют - в целые числа. || обычно используется для предоставления значения по умолчанию в случае, если первый операнд оценивается как false,

Так что попробуйте изменить выражения, как

laborItem.HoursB4Today | 0

в

laborItem.HoursB4Today || 0   
Другие вопросы по тегам