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

前端 未结 4 1347
野的像风
野的像风 2020-12-11 19:16

Through my javascript library, I end up with a string that represents a number. Now I want to preform an addition on that number without it doing a string concatenation inst

相关标签:
4条回答
  • 2020-12-11 19:38

    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.

    0 讨论(0)
  • 2020-12-11 19:40

    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;                                      
            }           
    });
    
    0 讨论(0)
  • 2020-12-11 19:47

    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.

    0 讨论(0)
  • 2020-12-11 19:49

    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.

    0 讨论(0)
提交回复
热议问题