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

Nat*_*Pet 37 javascript parsing

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

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

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

Nel*_*son 34

像这样:

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

  • -1仅适用于某些国家/地区.许多人使用时间作为千位分隔符或根本不使用.欧洲大多数人使用逗号表示浮点值. (20认同)
  • 嗯,对于大多数人的逻辑来说,9.0可以完全被接受为整数,而不是说这是确切的答案,但它可以完成工作. (2认同)
  • @Keith:JavaScript 的浏览器实现在所有国家/地区的工作方式不都是一样的吗?也就是说,他们不都是把句点当作小数点分隔符吗?无论如何,带有千位分隔符的字符串,无论是逗号还是句点,无论如何都不会被 JavaScript 解释器视为有效数字。 (2认同)

Man*_*gna 33

您可以使用parseFloat函数.

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

就像是:

val = parseFloat(val);
if(isNaN(val))
    alert("not a float!");
Run Code Online (Sandbox Code Playgroud)

  • @Mangiucugna我做到了.它有问题.例如,你试过喂"3.2.1.release"吗?猜猜会发生什么......这是一个非常有问题的*parseXXX*故障.另外,你回答了转换部分,但没有回答测试部分 - 你从不测试浮点值,而是测试任何类型的数字(这可能也很好,因为技术上每个`Number`都是JS中的浮点数) (11认同)
  • `parseFloat('2016-03-01')`返回true.咦?这不是一个数字,这是一个约会! (5认同)

Nik*_*vić 8

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

// For example, following code will work
var n = parseInt('123asd');
n == 123
Run Code Online (Sandbox Code Playgroud)

这些函数将返回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);
}
Run Code Online (Sandbox Code Playgroud)

  • 小心带有指数的数字。如果您想正确处理 tohse - 您可以使用例如: `/^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9 ]+)?$/` 信用:https://www.regular-expressions.info/floatingpoint.html (2认同)

Yas*_*ika 7

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

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

//alert(isFloat("3.444"));
Run Code Online (Sandbox Code Playgroud)


Pow*_*ave 6

Number.prototype.isFloat = function() {
    return (this % 1 != 0);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以

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

console.log(floatValue.isFloat()); // will output true
console.log(nonFloatValue.isFloat()); // will output false
Run Code Online (Sandbox Code Playgroud)

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


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


mak*_*d19 5

在我的情况下,一个非常简单的正则表达式成功了。

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

/^[0-9]+(\.)?[0-9]*$/.test(number)
Run Code Online (Sandbox Code Playgroud)

之间//的一切都是正则表达式。

/^表示匹配从单词的开头开始,$/表示匹配以单词结束。如果你认为这个词不能以字母开头,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
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

70512 次

最近记录:

7 年,1 月 前