Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is angular.isNumber() not working as expected?

It appears as if AngularJS's angular.isNumber is not working. It doesn't work with strings that are numbers. Am I doing something wrong? Should I just use isNaN()?

angular.isNumber('95.55') == false
angular.isNumber('95.55' * 1) == true
angular.isNumber('bla' * 1) == true
angular.isNumber(NaN) == true

I need something to see if a string is a number (when it actually is) and angular.isNumber() won't let me do that unless I multiply by 1, but if I do that then it will always be true. Also NaN is not a number (by definition) and so should return false.

like image 374
Kevin Beal Avatar asked Jun 27 '13 19:06

Kevin Beal


1 Answers

In JavaScript, typeof NaN === 'number'.

If you need to recognise a String as a Number, cast it to Number, convert back to String and compare this against the input, for example.

function stringIsNumber(s) {
    var x = +s; // made cast obvious for demonstration
    return x.toString() === s;
}

stringIsNumber('95.55'); // true
stringIsNumber('foo'); // false
// still have
stringIsNumber('NaN'); // true
like image 191
Paul S. Avatar answered Nov 10 '22 20:11

Paul S.