JavaScript——数字超过精度导致数据有误

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: JavaScript——数字超过精度导致数据有误

前言

接口返回的number类型的数据,超过了JavaScript中Number类型的限制,浏览器自动进行了转换;

console.log(7232167009634730040)

内容

以下内容来自Claude

JavaScript 的 Number 类型可以安全表示的最大整数是 2^53 - 1,也就是 9007199254740991。大于这个值的整数在 JavaScript 中会失去精度或变为 Infinity。例如:

js
> 9007199254740991  // 最大安全整数 
9007199254740991
> 9007199254740992  
9007199254740992  // 超出范围,已经失去精度
> 7232167009634730040 
Infinity  // 超出 Number 范围,变为 Infinity

所以当我们需要在 JavaScript 中处理一个超过 Number 类型范围的超大整数时,需要注意几点:

  1. API 端返回科学计数法格式的字符串,如 "7.23216700963473e19"。然后前端解析为 Number 使用。这可以保证数字的精度。
  2. API 直接返回字符串,如 "7232167009634730040"。前端检查是否可以转为 Number,如果不能则使用字符串处理。这样也可以避免精度丢失的问题。
  3. API 返回支持大数的类型,如 String、Decimal 等。然后前端引入对应库处理。
  4. 在前后端共同配合下,返回和解析合适格式的数值。API 端返回适合的格式,前端选择合适的方法解析。这可以避免直接使用 Number 类型导致的超出范围问题。

总的来说,当涉及到特别大的数字时,单靠 JavaScript 的 Number 类型是无法很好表示和处理的。这时我们需要前后端共同来实现对超大整数的支持,通过返回和解析科学计数法字符串或使用其他支持大数的类型等手段,来避开 Number 类型的限制,精确地运算和表示超大整数。

学无止境,谦卑而行.

目录
相关文章
|
4月前
|
JavaScript 前端开发
js实现数据的双向绑定
js实现数据的双向绑定
121 59
|
4月前
|
JavaScript 算法 前端开发
采招网JS逆向:基于AES解密网络数据
采招网JS逆向:基于AES解密网络数据
69 0
|
29天前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
2月前
|
前端开发 JavaScript
JS-数据筛选
JS-数据筛选
34 7
|
2月前
|
JavaScript 数据安全/隐私保护
2024了,你会使用原生js批量获取表单数据吗
2024了,你会使用原生js批量获取表单数据吗
50 4
|
3月前
|
JavaScript 前端开发 安全
js逆向实战之烯牛数据请求参数加密和返回数据解密
【9月更文挑战第20天】在JavaScript逆向工程中,处理烯牛数据的请求参数加密和返回数据解密颇具挑战。本文详细分析了这一过程,包括网络请求监测、代码分析、加密算法推测及解密逻辑研究,并提供了实战步骤,如确定加密入口点、逆向分析算法及模拟加密解密过程。此外,还强调了法律合规性和安全性的重要性,帮助读者合法且安全地进行逆向工程。
98 11
|
2月前
|
机器学习/深度学习 JSON JavaScript
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
33 0
|
2月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
|
3月前
|
JSON JavaScript 前端开发
6-19|Python数据传到JS的方法
6-19|Python数据传到JS的方法
|
4月前
|
JSON JavaScript 数据格式
js实现更新数据
js实现更新数据
58 1