在检查 NULL 值时使用 parseFloat

use parseFloat while checking for NULL values

在 AngularJS 中,我试图弄清楚当前工人的标准工时与加班工时的多少。如果小时数是整数,我有一个公式可以很好地工作,但如果它有小数则失败。

我必须考虑可能没有提供其中一个号码的情况。这是我目前的做法:

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

这 returns 只有整个小时。

我也试过:

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 吗,还是有 another/better 方式?

我猜你更想使用 || 而不是 | 例如laborItem.HoursB4Today | 0

单个管道是按位或运算符,'converts' 您的数字(如果存在)转换为整数。 || 通常用于提供默认值,以防第一个操作数的计算结果为 false

所以尝试改变表达式,例如

laborItem.HoursB4Today | 0

进入

laborItem.HoursB4Today || 0   

您可以试试下面的代码

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) 保证它们指向一个数值。您不需要一次又一次地解析它们。