当前位置: 首页 > 知识库问答 >
问题:

当任何输入字符串可能表示大于“Number.MAX_SAFE_INTEGER”的数值时,使用“str1

鞠凌龙
2023-03-14

我想使用str1

但是,我的输入字符串表示大整数(十六进制格式,这很重要)。

即使任何输入字符串表示的数值大于Number.MAX_SAFE_INTEGER,还是NodeJS会在比较它们之前将这些String对象转换为Number对象(在这种情况下,我将面临数据丢失的风险)?


共有2个答案

郎玮
2023-03-14

根据ecma-262

使用'str'时

7.2.13抽象关系比较

If Type(px) is String and Type(py) is String, then

    If IsStringPrefix(py, px) is true, return false.
    If IsStringPrefix(px, py) is true, return true.
    Let k be the smallest nonnegative integer such that the code unit at index k within px is different from the code unit at index k within py. (There must be such a k, for neither String is a prefix of the other.)
    Let m be the integer that is the numeric value of the code unit at index k within px.
    Let n be the integer that is the numeric value of the code unit at index k within py.
    If m < n, return true. Otherwise, return false.

在任何时候都不会发生整数转换(至少不是你所说的那样)

算法应该是这样的

if (str1.startsWith(str2)) return false
if (str2.startsWith(str1)) return true

for (let i = 0; i < str1.length; ++i) {
  if (str1[i] !== str2[i]) {
    k = i;
    break;
  }
}
return str1.codePointAt(k) < str2.codePointAt(k)

所以可以使用运算符

现在得到“10”有意义吗

杭镜
2023-03-14

不,它使用起来不安全,甚至不依赖于Number.MAX_SAFE_INTEGER。比较将使用词典排序:

console.log("10" < "2"); //true
console.log(10 < 2); //false
 类似资料:
  • 我想询问在使用表示大于的整数值的字符串调用时的行为。 从技术上讲,我假设我应该期待与直接使用该值相同的结果(即,作为数字而不是字符串)。 例如,以下两个将产生相同的值(无论其是否准确): 常量x=parseInt(“0x1000000000000000000000000”) 然而,我确实明白,也许JS不能保证这一点。 所以我真正想知道的是,当使用表示大于。

  • NowCoder 题目描述 // true "+100" "5e2" "-123" "3.1416" "-1E-16" // false "12e" "1a3.14" "1.2.3" "+-5" "12e+4.3" 解题思路 使用正则表达式进行匹配。 // html [] : 字符集合 () : 分组 ? : 重复 0 ~ 1 次 + : 重复 1 ~ n 次 * :

  • 对不起,新手:/。所以当我在“输入你的年龄”中键入一封信时,我有这个问题 输入您的年龄:q 线程“main”java.util.InputMismatchException中出现异常 在java.util.scanner.throwfor(Scanner.java:909) 我想如果我打了任何一个字母,它显示“无效输入”。有人能帮我吗?[对不起,糟糕的英语]

  • 一、题目 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例子说明 例如,字符串“+100”,“5e2”,“-123”,“3.1416”及”-1E-16”都表示数值,但“12e”,”1a3.14”,”1.2.3”,”+-5”及“12e+5.4”都不是。 二、解题思路 在数值之前可能有一个表示正负的’-‘或者’+’。接下来是若干个0到9的数位表示数值的整数部分(在某些小数里可能没有数值

  • 我试图将字符串时间戳转换为整数时间戳,并使用postgres作为数据库。