在这个页面上,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 */