Использовать 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