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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 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 类型的限制,精确地运算和表示超大整数。

学无止境,谦卑而行.

目录
相关文章
|
1月前
|
JavaScript 前端开发
js实现数据的双向绑定
js实现数据的双向绑定
30 2
|
25天前
|
JavaScript 算法 前端开发
采招网JS逆向:基于AES解密网络数据
采招网JS逆向:基于AES解密网络数据
37 0
|
1月前
|
数据采集 存储 JavaScript
基于Python 爬书旗网小说数据并可视化,通过js逆向对抗网站反爬,想爬啥就爬啥
本文介绍了如何使用Python编写网络爬虫程序爬取书旗网上的小说数据,并通过逆向工程对抗网站的反爬机制,最后对采集的数据进行可视化分析。
基于Python 爬书旗网小说数据并可视化,通过js逆向对抗网站反爬,想爬啥就爬啥
|
28天前
|
JSON JavaScript 数据格式
js实现更新数据
js实现更新数据
36 1
|
1月前
|
JavaScript 前端开发
JavaScript中通过按回车键进行数据的录入
这篇文章提供了一个JavaScript示例代码,演示了如何通过监听回车键(keyCode为13)在网页上实现数据的录入和触发一个警告框提示"正在登录验证......"。
JavaScript中通过按回车键进行数据的录入
|
1月前
|
JavaScript 数据处理
如何使用 Vue.js 将数据对象的值放入另一个数据对象中?
如何使用 Vue.js 将数据对象的值放入另一个数据对象中?
|
1月前
|
JavaScript 算法 数据安全/隐私保护
烯牛数据JS逆向:MD5数据加密?不存在的!
烯牛数据JS逆向:MD5数据加密?不存在的!
53 1
|
1月前
|
JavaScript 前端开发 网络协议
抖音直播弹幕数据逆向:websocket和JS注入
抖音直播弹幕数据逆向:websocket和JS注入
140 1
|
1月前
|
JavaScript 前端开发
在JavaScript如何确认数据的类型?
# `typeof` 与 `instanceof` 数据类型判断 `typeof` 操作符用于确定变量的基本数据类型,例如: - "string" - "number" - "boolean" - "undefined" 但对于引用类型如对象和数组,包括 `null`,它返回 "object"。 `instanceof` 用于检查对象是否为特定构造函数的实例,返回布尔值。它能准确识别数组等复杂类型,通过检查对象的原型链来确定其是否属于某个构造函数的实例。 两者结合使用可全面判断数据类型。
27 2
|
20天前
|
Java 开发者 关系型数据库
JSF与AWS的神秘之旅:如何在云端部署JSF应用,让你的Web应用如虎添翼?
【8月更文挑战第31天】在云计算蓬勃发展的今天,AWS已成为企业级应用的首选平台。本文探讨了在AWS上部署JSF(JavaServer Faces)应用的方法,这是一种广泛使用的Java Web框架。通过了解并利用AWS的基础设施与服务,如EC2、RDS 和 S3,开发者能够高效地部署和管理JSF应用。文章还提供了具体的部署步骤示例,并讨论了使用AWS可能遇到的挑战及应对策略,帮助开发者更好地利用AWS的强大功能,提升Web应用开发效率。
42 0