JS正则表达式说数字包含'.',但没有



在这个页面上,https://emperorbob7.github.io/JSheets/,我有一个名为TYPE的函数,它的语法在页面上链接,用于十进制检测功能的正则表达式位于下面的代码块中*

然而,一旦我输入了太多数字,TYPE 就会说单元格包含一个小数,尽管没有小数。这是一个自动函数,可以添加一个.每当数字超过某个限制时?

示例案例:3123123123123123123122312312312 输出:十进制 编辑:

function TYPE() {
	const regex = /.[0-9]/;
	if(arguments[0] == "true" || arguments[0] == "false")
		return "Boolean";
	if(isNaN(arguments[0]))
		return "String";
	else if(regex.test(arguments[0]))
		return "Decimal";
	else
		return "Integer";
}

Code^ 很抱歉之前没有发布它,将来会记住它。

对不起,这个问题措辞不好,提前谢谢

您有一个大于 Number 对象可以处理的整数(请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER(,因此当它转换为正则表达式的字符串时,它将成为指数值。

尝试console.log(3123123123123123123122312312312);,你会得到3.123123123123123e+30

let val = 3123123123123123123122312312312;
val.toString();
"3.123123123123123e+30"

您还可以使用Number.isSafeInteger(3123123123123123123122312312312);测试您的值,这将返回false

解决方案是使用Number.isInteger();而不是正则表达式作为测试。它正确地返回大数的true

请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger

Javascript只能安全地存储最多9007199254740991的整数。除此之外,javascript可以将数字转换为幂符号(即,5000000000000000000000变成5e+21(或开始将数字转换为零以进行存储。

var n = 3123123123123123123122312312312;
console.log(n);
/* Output: 3.123123123123123e+30 */

您可以使用Number.isSafeInteger()来测试该数字是否在安全范围内,然后在这种情况下将原始代码应用于该数字。如果不是,您可以执行其他测试(例如针对/d.d+e+d+的测试(,以查看包含的小数是否是由于指数表示法引起的。

还要注意,指数表示法中的数字将使用Number.isInteger()来测试true,即使它一开始就是浮点数,因为该信息将丢失。

var x_int = 3123123123123123123122312312312;
var x_flt = 3123123123123123123122312312312.333333333;
console.log( x_int === x_flt);
/* Output: true */
console.log(Number.isInteger(x_flt));
/* Output: true */

相关内容

  • 没有找到相关文章

最新更新