【问题标题】:Conversion issue for a long string of integers in JavaScriptJavaScript中一长串整数的转换问题
【发布时间】:2019-02-10 14:21:10
【问题描述】:

我正在尝试将只有整数的长字符串转换为数字。

var strOne = '123456789123456789122';
parseInt(strOne, 10);
// => 123456789123456800000

var strTwo = '1234567891234567891232';
parseInt(strTwo, 10);
// => 1.234567891234568e+21

预期的输出应该与strOnestrTwo 相同,但这里不会发生这种情况。在将字符串转换为数字时,output 会发生变化。

解决此问题的最佳方法是什么?

【问题讨论】:

  • 很遗憾,您的号码太长,无法放入 JavaScript 号码并被包装。

标签: javascript arrays numbers parseint


【解决方案1】:

BigInt 现在可在浏览器中使用。

BigInt 是一个内置对象,它提供了一种表示整体的方法 大于 253 的数字,这是 JavaScript 可以处理的最大数字 用 Number 原语可靠地表示。

value 正在创建的对象的数值。可以是字符串或整数。

var strOne = '123456789123456789122';

var intOne = BigInt(strOne);

var strTwo = '1234567891234567891232';

var intTwo = BigInt(strTwo);

console.log(intOne, intTwo);

【讨论】:

  • @guest271314:我不知道 NinaSholz 对 cme​​ts 的回应是什么,他正确地指出有些重要的浏览器不支持这一点。兼容性图表也是如此。
  • @ScottSauyet Edge 对你来说“重要”吗?为什么?有段时间没用过*indows或IE,也没有机会用过一次Edge。谁在乎 MS 浏览器是否不支持有用的功能。使用 FOSS 浏览器即可。无论如何,请参阅链接库。现在,如果这些库没有返回与 Edge 内置 BigInt 相同的结果,您可以向 MS 提交问题以修复该问题并在 Edge 上实现 BigInt
  • 我自己不使用它们,在家里使用 Linux,在工作中使用 Mac。但我开发的应用程序仍然需要支持它们。 Wikipedia reports IE 和 Edge 的合并桌面份额为 14%,总体合并份额为 5%。我很高兴知道 BigInt 的普及程度如此之高,但它离普及还有一定的距离。
  • @guest271314:我认为我们生活在不同的世界。我在一家向大型金融公司销售软件和服务的公司工作。不会编写可在其环境中运行的软件的供应商不会销售软件。他们中的许多人仍在使用 IE11 或 Edge。
【解决方案2】:

很遗憾,您的数字太大,转换完成后会被包裹起来。

你可以在 JavaScript 中表达的最大整数是2^53-1,它由Number.MAX_SAFE_INTEGER 给出,参见MDN doc here

该数字背后的原因是 JavaScript 使用 IEEE 754 中指定的双精度浮点格式数字,并且只能安全地表示 -(2^53 - 1) 和 2^53 - 1 之间的数字。

console.log(Number.MAX_SAFE_INTEGER);

如果您想使用大于此限制的数字,则必须使用与Number 不同的表示形式,例如String,并使用库来处理操作(例如,参见the BigInteger library)。

【讨论】:

  • 但这并不意味着没有办法处理更大的数字
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 2011-07-31
  • 1970-01-01
  • 2016-12-23
相关资源
最近更新 更多