How to ensure javascript addition instead of string concatenation (Not always adding integers)

我是研究僧i 提交于 2019-11-28 13:47:52

Try using parseFloat. The input variables will be converted to floats, which will work whether the string contains an integer or a float. Your result will always be a float.

It is reasonably safe to always use parseFloat even if you are given an integer. If you must use the appropriate conversion, you could match for a decimal point and use the appropriate function.

I'm going to assume that float addition is sufficient, and if it isn't, then you'll need to dig deeper.

function alwaysAddAsNumbers(numberOne, numberTwo){
  var parseOne = parseFloat(numberOne),
      parseTwo = parseFloat(numberTwo);
  if (isNaN(parseOne)) parseOne = 0;
  if (isNaN(parseTwo)) parseTwo = 0;
  return parseOne + parseTwo;
}

To take what @Asad said, you might want to do this instead:

function alwaysAddAsNumbers(a, b){
  var m = 0,
      n = 0,
      d = /\./,
      f = parseFloat,
      i = parseInt,
      t = isNaN,
      r = 10;
  m = (d.test(a)) ? f(a) : i(a,r);
  n = (d.test(b)) ? f(b) : i(b,r);
  if (t(m)) m = 0;
  if (t(n)) n = 0;
  return m + n;
}

this will always give you at least a zero output, and doesn't tell you if either one is NaN.

For some reason.... who knows???

Using parseFloat works.... when parseInt does not... obviously they are not always the same.

FWIW.... I'm "adding" data elements from "checked" checkboxes here...

    var AddOns = 0;

    $( '.broadcast-channels').each(function(){              
        if ( $(this).prop("checked")) {                             
            var thisAddOn =  parseFloat($(this).data('channel'));      
            AddOns = AddOns + thisAddOn;                                      
        }           
});
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!