为什么我的检查浮点数的测试会返回错误?

时间:2016-07-08 20:40:15

标签: javascript

我创建了一个javascript方法,用于检查数字是否为浮点数。每次我测试float的方法时,它都会返回FALSE。我不确定我在这里做错了什么。任何帮助将非常感激!

以下是我的代码..谢谢!

function isFloat(n){

    var patt =  new RegExp('[+-]([0-9]*[.])?[0-9]+');
    return patt.test(n)
}


console.log(isFloat(12.40));

3 个答案:

答案 0 :(得分:3)

有一种更简单的方法可以检查数字是否为浮点数。只需将覆盖值与原始值进行比较即可。如果它们相同,那么它就是一个整数。



function isFloat(n) {
  return Math.floor(n) !== n;
}

console.log(isFloat(1));
console.log(isFloat(1.2));
console.log(isFloat(12));
console.log(isFloat(12.4));




当且仅当您在数字上使用它时,这将有效。如果您担心有人传入非号码,您可以执行额外的检查。

function isFloat(n) {
  return typeof n === 'number' && Math.floor(n) !== n;
}

或者,如果您正在运行支持它的环境,则可以使用Number.isInteger进一步简化此操作。



function isFloat(n) {
  return typeof n === 'number' && !Number.isInteger(n);
}

console.log(isFloat(1));
console.log(isFloat(1.2));
console.log(isFloat(12));
console.log(isFloat(12.4));
console.log(isFloat('a'));




答案 1 :(得分:0)

你的RegEx错了,它应该是

/[+-]?\d+\.\d+/g

另外,正如其他人所说,这不是最佳解决方案。使用!Number.isInteger(num)

答案 2 :(得分:0)

问题是toString未在数字前插入'+'

12.40.toString(); // "12.4", not "+12.4"

所以你可以使用像

这样的正则表达式
new RegExp('[+-]?([0-9]*[.])?[0-9]+');

但是,我建议Validate decimal numbers in JavaScript - IsNumeric()