如何检查字符串是否为浮点数?

时间:2012-09-17 21:43:16

标签: javascript parsing

我传入一个名为value的参数。我想知道价值是否是浮动。 到目前为止,我有以下内容:

if (!isNaN(value))
{
    alert('this is a numeric value but not sure if it is a float.');
}

如何更进一步将字符串转换为可以评估为浮点数的字符串?

17 个答案:

答案 0 :(得分:34)

您可以使用parseFloat函数。

如果传递的值是float,则函数返回值,否则返回NaN。

类似的东西:

val = parseFloat(val);
if(isNaN(val))
    alert("not a float!");

答案 1 :(得分:30)

像这样:

if (!isNaN(value) && value.toString().indexOf('.') != -1)
{
    alert('this is a numeric value and I\'m sure it is a float.');
}​

答案 2 :(得分:8)

以下功能还会检查格式。例如。 JavaScript本机parseIntparseFloat函数也解析包含非数字字符的字符串,上面的函数会产生这种后果。

// For example, following code will work
var n = parseInt('123asd');
n == 123

这些函数将返回false这样的字符串。

function isFloat(val) {
    var floatRegex = /^-?\d+(?:[.,]\d*?)?$/;
    if (!floatRegex.test(val))
        return false;

    val = parseFloat(val);
    if (isNaN(val))
        return false;
    return true;
}

function isInt(val) {
    var intRegex = /^-?\d+$/;
    if (!intRegex.test(val))
        return false;

    var intVal = parseInt(val, 10);
    return parseFloat(val) == intVal && !isNaN(intVal);
}

答案 3 :(得分:6)

检查字符串是整数还是浮点数

function isFloat(n) {
    return parseFloat(n.match(/^-?\d*(\.\d+)?$/))>0;
}

//alert(isFloat("3.444"));

答案 4 :(得分:6)

Number.prototype.isFloat = function() {
    return (this % 1 != 0);
}

然后你可以

var floatValue = parseFloat("2.13");
var nonFloatValue = parseFloat("11");

console.log(floatValue.isFloat()); // will output true
console.log(nonFloatValue.isFloat()); // will output false

2.00这样的值在JS中不能被认为是float,或者更确切地说每个数字都是JS中的浮点数

<小时/> 编辑:忘了提到扩展内置类型的原型被认为是一个不好的例子(有充分的理由),并且在生产环境中不鼓励使用它。您仍然可以将此检查作为普通函数

实现

答案 5 :(得分:3)

使用此:

var isNumber = /^\d+\.\d+$/.test(value);

答案 6 :(得分:2)

我编写了接受字符串,整数和浮点数的函数

function isInt(x) {
    return !isNaN(x) && eval(x).toString().length == parseInt(eval(x)).toString().length
}

function isFloat(x) {
    return !isNaN(x) && !isInt(eval(x)) && x.toString().length > 0
}

示例ouptuts:

console.log(isFloat('0.2'))  // true
console.log(isFloat(0.2))    // true
console.log(isFloat('.2'))   // true
console.log(isFloat('-.2'))  // true
console.log(isFloat(-'.2'))  // true
console.log(isFloat(-.2))    // true
console.log(isFloat('u.2'))  // false
console.log(isFloat('2'))    // false
console.log(isFloat('0.2u')) // false

console.log(isInt('187'))  // true
console.log(isInt(187))    // true
console.log(isInt('1.2'))  // false
console.log(isInt('-2'))   // true
console.log(isInt(-'1'))   // true
console.log(isInt('10e1')) // true
console.log(isInt(10e1))   // true

答案 7 :(得分:2)

function checkFloat(value) {
    let parsed = Number.parseFloat(value);
    return (!Number.isNaN(parsed)) && (!Number.isInteger(parsed))
}

答案 8 :(得分:2)

就我而言,一个非常简单的正则表达式就是这个伎俩。

我需要验证用户的输入是否输入是有效的货币值。我只是用 -

/^[0-9]+(\.)?[0-9]*$/.test(number)

//之间的所有内容都是正则表达式。

/^表示匹配从单词的开头开始,$/表示匹配以单词结束。如果您认为单词不能以字母0开头,那么表达式就像[1-9][0-9]*

[0-9]+表示该字必须以至少一个数字开头。

注意:*表示零或多,+表示一个或多个,?表示一个或没有。

到此为止,表达式为/^[1-9][0-9]*$/,这只会验证整数。

要测试数字中的句点(。),我们需要将\.与表达式一起使用。 .是一个匹配所有内容的特殊字符,\.只会匹配句点。

最后,另一个字符类[0-9]*将匹配零个或多个数字。

测试用例

/^[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

答案 9 :(得分:2)

检查字符串是否为浮点数(避免使用int值)

function isFloat(n) {
   if( n.match(/^-?\d*(\.\d+)?$/) && !isNaN(parseFloat(n)) && (n%1!=0) )
      return true;
   return false;
}

var nonfloat = isFloat('12'); //will return false
var nonfloat = isFloat('12.34abc'); //will return false
var float = isFloat('12.34'); //will return true

答案 10 :(得分:1)

直截了当:

if (parseFloat(value).toString() === value.toString()) {
    ...
}

答案 11 :(得分:1)

如果需要检查value是int还是float:

function isFloatOrInt(n) {
    return !isNaN(n) && n.toString().match(/^-?\d*(\.\d+)?$/);
}

答案 12 :(得分:0)

此函数返回字符串的数值,无论是int还是float

function getNumericVal(str) {
    if(isNaN(str)) return;
    try {return parseFloat(str);} 
    catch(e) {return parseInt(str);}
}

答案 13 :(得分:0)

只有当value作为字符串传入时,我们才能完全确定它是否使用小数点。因为1.0(作为数字)导致1,但"1.0"(作为字符串)导致"1.0"完全相同。从那里我们可以找到它是否包含小数点.。所以我们需要将参数value作为字符串传递。

如果value是字符串

,以下内容将有效
if ( value.indexOf('.') > -1 ) { // value is a floating point

}

value.toString()不会将1.0转换为"1.0"(相反,它只会将其转换为1)所以通过字符串传递是最好的选择,因为它维护所有它的人物。

如果您不想使用字符串,则无法将1.0捕获为浮点值。如果要测试数字是浮点值,请使用以下命令:

以下内容不适用于1.0,1.00等

if ( value >>> 0 !== x ) { // value is a floating point

}

注意:您还应该检查!isNaN(value)(我将其留下来专注于更改)。

答案 14 :(得分:0)

使用此jquery代码

    <script>
    $(document).ready(function () {
        $(".allow_only_float").keypress(function (e) {

            if (e.which != 46 && e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
                e.preventDefault();//return false;
            }
            var avg = $('#<%=txtAverage.ClientID%>').val();
            var idx = avg.indexOf(".");
            if (idx > -1 && e.which == 46) {
                e.preventDefault();//return false;
            }
        });
    });
    </script>
<body>
    <input type='text' class='allow_only_float'>
</body>

答案 15 :(得分:0)

function isFloat(inputString) {
    const parsed = parseFloat(inputString);

    return !isNaN(parsed) && parsed.toString() === inputString;
}

isFloat('.4') // false
isFloat('1.4') // true
isFloat('1.') // false
isFloat('1') // true
isFloat('asd') // false
isFloat('123asd') // false

答案 16 :(得分:-3)

if (!isNaN(value) && String(value).includes('.')) {
    alert("it's a float");
    let newFloatValue = parseFloat(value)
}