检查NULL值时使用parseFloat

时间:2016-07-25 05:42:28

标签: javascript angularjs parsefloat

在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 个答案:

答案 0 :(得分:4)

您可以尝试以下代码

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

我刚刚修改了你的代码,但这可以确保 laborItem 的变量(HoursB4Today,Hours)的未来使用保证它们指向数值。你不需要一次又一次地解析它们。

答案 1 :(得分:3)

我想您更愿意使用||代替|laborItem.HoursB4Today | 0

单个管道是按位OR运算符,并且&#39;转换&#39;你的数字 - 如果存在 - 整数。 ||通常用于在第一个操作数求值为false时提供默认值。

所以尝试更改像

这样的表达式
laborItem.HoursB4Today | 0

进入

laborItem.HoursB4Today || 0