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
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.
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;
}
});
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.
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.