【问题标题】:use parseFloat while checking for NULL values在检查 NULL 值时使用 parseFloat
【发布时间】:2016-07-25 05:42:27
【问题描述】:

在 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,还是有其他/更好的方法?

【问题讨论】:

    标签: javascript angularjs parsefloat


    【解决方案1】:

    你可以试试下面的代码

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

    【讨论】:

      【解决方案2】:

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

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

      所以试着改变表达方式

      laborItem.HoursB4Today | 0
      

      进入

      laborItem.HoursB4Today || 0   
      

      【讨论】:

      • 我得试试这个看看。
      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多