I am passing in a parameter called value. I\'d like to know if value is a float. So far, I have the following:
if (!isNaN(value))
{
alert(\'this is a num
Use This:
var isNumber = /^\d+\.\d+$/.test(value);
Only if value
is passed in as a string can we fully determine if it uses a decimal point or not. Because 1.0
(as a number) results in 1
though "1.0"
(as a string) results in "1.0"
exactly the same. And from there we can find if it contains a decimal point, .
. So we need to pass the argument value
as a string.
The following will work if value
is a string
if ( value.indexOf('.') > -1 ) { // value is a floating point
}
value.toString()
will not turn 1.0
to "1.0"
(rather, it would simply turn it to 1
) so passing by string is the best alternative because it maintains all of its characters.
If you do not wish to use a string, then there is no way of capturing 1.0
as a floating-point value. Use the following if you want to test of a number is a floating point value:
The following will not work for 1.0, 1.00, etc.
if ( value >>> 0 !== x ) { // value is a floating point
}
Note: You should also check for !isNaN(value)
(I left that out to focus on the changes).
In my case a very simple regex did the trick.
I needed to validate an user's input whether the input is a valid monetary value. I simply used-
/^[0-9]+(\.)?[0-9]*$/.test(number)
everything between //
is the Regular Expression.
/^
means the match starts from the beginning of the word and $/
means the match ends with the word. If you think the word can not start with the letter 0
then the expression would be like [1-9][0-9]*
[0-9]+
means the word must start with at least one number.
Note: *
means zero or more, +
means one or more and ?
means one or none.
Up to here the expression is /^[1-9][0-9]*$/
and this would validate only the integer numbers.
To test for a period (.) in the number we need to use \.
with the expression. .
is a special character which matches everything, \.
will only match the period.
Finally another character class [0-9]*
would match with zero or more digits.
Test Cases
/^[0-9]+(\.)?[0-9]$/.test("21.38a") // ==> false
/^[0-9]+(\.)?[0-9]$/.test("21.38") // ==> true
/^[0-9]+(\.)?[0-9]$/.test("y2781.68") // ==> false
/^[0-9]+(\.)?[0-9]$/.test("2781r.68") // ==> false
If you need to check if value is int or float:
function isFloatOrInt(n) {
return !isNaN(n) && n.toString().match(/^-?\d*(\.\d+)?$/);
}
Number.prototype.isFloat = function() {
return (this % 1 != 0);
}
Then you can
var floatValue = parseFloat("2.13");
var nonFloatValue = parseFloat("11");
console.log(floatValue.isFloat()); // will output true
console.log(nonFloatValue.isFloat()); // will output false
Values like 2.00
cannot really be considered float in JS, or rather every number is a float in JS.
Like this:
if (!isNaN(value) && value.toString().indexOf('.') != -1)
{
alert('this is a numeric value and I\'m sure it is a float.');
}