我创建了一个javascript方法,用于检查数字是否为浮点数。每次我测试float的方法时,它都会返回FALSE。我不确定我在这里做错了什么。任何帮助将非常感激!
以下是我的代码..谢谢!
function isFloat(n){
var patt = new RegExp('[+-]([0-9]*[.])?[0-9]+');
return patt.test(n)
}
console.log(isFloat(12.40));
答案 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]+');