Javascript类型从字符串到数字的转换

标签 javascript reactjs type-conversion

我遇到一个问题,20个字符串转换为JS新的NUMBER方法。

var x4 = "22222222222222222222";
var x5 = "22222222222222222229";
Number(x4) 
parseInt(x5);
<小时/>
//Output
22222222222222220000
22222222222222220000

我期望获得与变量相同的值,但采用数字格式,但我不知道这里出了什么问题。将任意位数的字符串转换为数字的最佳方法是什么。

最佳答案

JavaScript 将数字存储为 Float64(又名 IEEE 754 double-precision)。

因此,整数(整数,无分数)被限制为 53 位(52 位显式,1 位隐式)。

任何大于该值的数字都无法在不损失精度的情况下存储;正在做出妥协并存储近似值。

在 JS 中,您可以使用 Number.MAX_SAFE_INTEGER 获取这个数字 (2 ^ 53 - 1), 或者,如果您想检查数字是否是“安全整数”(不会丢失精度),请使用 Number.isSafeInteger

JS 原生无法存储大于 Number.MAX_SAFE_INTEGER 的数字;但是,根据您手头的任务,可以使用带有自定义的 String/Array/Buffer 来模拟更大的数字(成本高昂)执行数学运算的方法,使用为您执行此操作的第三方库,或者,如果您使用的是 NodeJS,则使用更高效的 native (编译)库来处理大量数字(例如 bignum )。

更新: 自从我发布上述答案以来,JavaScript 获得了对 BigInt 的支持,这是一种任意大的安全整数格式。 还添加了 BigInt 文字,它们只是带有 n 后缀的数字。因此,对于您的示例:

const x4 = 22222222222222222222n;
const x5 = 22222222222222222229n;

这里没有精度损失。 你甚至可以走得更远;以下内容将在完全不损失精度的情况下工作,尽管速度非常慢:

const veryLargeNumber = x4 ** 10000n;
// 29368033185714599045483110729334710018527698466665246504292741901594849999445152112231214493149844001358430994081988271893728711217783149614681323681876825053646556106638954761114573427277415424n

关于Javascript类型从字符串到数字的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46185424/

相关文章:

javascript - 错误您应该使用 AngularJS 服务 $log 的 "log"方法而不是控制台对象

javascript - jQuery 问题 - #<an Object> 没有方法

javascript - preloadedState - session 结果被另一个 reducer 覆盖

javascript - 在 createElement() 类的 React 函数中以类元素节点为目标

javascript - 为什么这个 d3 六边形绘图不正确?

reactjs - Material-UI DataGrid 列单元格中的线性进度条

node.js - Nodejs - 使用预签名的 url 从 s3 存储桶中下载文件

c++ - 使用用户定义的转换运算符隐式转换它

c# - 将字节数组(从读取文件)转换为字符串

python - 为什么 Python 在连接字符串时不进行类型转换?