数据精度丢失

news2024/9/19 14:42:24

js数据精度丢失

最近看面试题想到了之前在开发钟遇到过的问题,现总结一下

在开发过程中,发现从后台返回的数据结构中的id字段在前端显示为不正确的值。经过排查,怀疑是JavaScript中Number类型精度丢失的问题。通过将id字段的类型从Number改为String进行测试,确认了问题的根源。尝试在前端获取数据后立即转换为String类型,但发现数据在JavaScript中接收时精度已经丢失,因此最佳解决方案是让后端将id字段的类型改为String。
在开发的时候,后台返回了一个数据结构如下

const list= [{
    id: 421234567891234567,
    name: '数据1'
  },{
    id: 421234567891234668,
    name: '数据2'
  },{
    id: 421234567891234679,
    name: '数据3'
  },{
    id: 421234567891234697,
    name: '数据4'
  }]
<template>
  <button @click="btn">
    按钮
  </button>
</template>
<script setup lang="ts">
    const num: Array<{ id: number, name: string }> = [{
      id: 421234567891234567,
      name: '数据1'
    },{
      id: 421234567891234668,
      name: '数据2'
    },{
      id: 421234567891234679,
      name: '数据3'
    },{
      id: 421234567891234697,
      name: '数据4'
    }]
    const btn = () => {
      console.log('num:', num)
    }
</script>

通过打印发现数据结果如下图

通过图片发现数据和原始数据不一样了

开始怀疑是数据传输过程造成的,换乘postman 测试发现数据正常

最后怀疑是js在Number类型时精度丢失,于是讲数据换乘String类型测试


<template>
  <button @click="btn">
    按钮
  </button>
</template>
<script setup lang="ts">
    const num1: Array<{ id: string, name: string }> = [{
      id: '421234567891234567',
      name: '数据1'
    },{
      id: '421234567891234668',
      name: '数据2'
    },{
      id: '421234567891234679',
      name: '数据3'
    },{
      id: '421234567891234697',
      name: '数据4'
    }]
    const btn = () => {
      console.log('num1:', num1)
    }
</script>

打印结果如下图

发现确实是Number类型时精度丢失,于是让后端将id改成了String类型

后来想前端能不能解决于是就有了一下的一些尝试

前端获取到数据后就转换一下

<template>
  <button @click="btn">
    按钮
  </button>
</template>
<script setup lang="ts">
const num: Array<{ id: number, name: string }> = [{
  id: 421234567891234567,
  name: '数据1'
}, {
  id: 421234567891234668,
  name: '数据2'
}, {
  id: 421234567891234679,
  name: '数据3'
}, {
  id: 421234567891234697,
  name: '数据4'
}]

const btn = () => {
  const num2 = num.map((item) => {
    return {...item, id: item.id.toString()}
  })
  console.log('num2', num2)
}
</script>

结果发现不行

最后还实验了别的方法都不行,在js拿到数据的那一刻数据的精度就已经丢失了,最好的方法还是后端去转换

js的数据最大精度为2的53次方 也就是最大只能是9007199254740992

js的数据最小精度为2的-53次方 也就是最大只能是-9007199254740992

js数据范围-9007199254740992~9007199254740992

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1929184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

I/O多路复用:解锁服务器高性能的钥匙

文章目录 I/O 多路复用引言I/O 多路复用&#xff1a;并发处理的艺术介绍I/O多路复用的意义Linux下的I/O多路复用机制总结 文件描述符&#xff08;fd&#xff09;&#xff1a;连接的桥梁概述文件描述符的作用文件描述符的生命周期特殊的文件描述符文件描述符与I/O多路复用 套接字…

数据结构—链式二叉树-C语言

代码位置&#xff1a;test-c-2024: 对C语言习题代码的练习 (gitee.com) 一、前言&#xff1a; 在现实中搜索二叉树为常用的二叉树之一&#xff0c;今天我们就要通过链表来实现搜索二叉树。实现的操作有&#xff1a;建二叉树、前序遍历、中序遍历、后序遍历、求树的节点个数、求…

路径规划 | 基于DQN深度强化学习算法的路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 DQN路径规划算法 基于深度强化学习算法的路径规划 matlab2023b 栅格环境&#xff0c;走迷宫&#xff0c;可以通过窗口界面方便观察交互过程&#xff0c;代码注释详尽。 程序设计 完整源码和数据私信博主回复基于DQN深…

什么是大数据信用?它的作用有哪些?怎么查询大数据?

在金融行业中&#xff0c;风险管理是至关重要的一环。传统的信用评估方法主要基于借款人的财务状况和信用历史&#xff0c;但这些信息往往无法全面反映借款人的信用状况。大数据信用的出现为金融风控提供了新的解决方案。 首先&#xff0c;大数据信用可以为金融机构提供更全面的…

flutter实现语言的国际化

目录 前言 一、GetX实现国际化(推荐) 1.安装Getx 2.创建国际化的文件 3.使用国际化字符串 4.配置GetMaterialApp 5.更改语言 6.系统语言 ​编辑 7.原生工程配置 1.iOS工程配 1.打开iOS工程&#xff0c;在Project的info里面添加语言 2.创建String File文件 2.andr…

运维管理数智化:数据与智能运维场景实践

本文来自腾讯蓝鲸智云社区用户&#xff1a;CanWay 摘要&#xff1a;笔者根据自身的技术和行业理解&#xff0c;分享嘉为蓝鲸数据与智能运维场景实践。 涉及关键字&#xff1a;一体化运维、平台化运维、数智化运维、AIOps、运维PaaS、运维工具系统、蓝鲸等。 本文作者&#xf…

vue2迁移到vue3注意点

vue2迁移到vue3注意点 1、插槽的修改 使用 #default &#xff0c; 以及加上template 模板 2、 类型的定义&#xff0c;以及路由&#xff0c;vue相关资源&#xff08;ref, reactive,watch&#xff09;的引入等 3、类装饰器 1&#xff09;vue-class-component是vue官方库,作…

ActiveMQ-CVE-2023-46604

Apache ActiveMQ OpenWire 协议反序列化命令执行漏洞 OpenWire协议在ActiveMQ中被用于多语言客户端与服务端通信。在Apache ActvieMQ5.18.2版本以及以前&#xff0c;OpenWire协议通信过程中存在一处反序列化漏洞&#xff0c;该漏洞可以允许具有网络访问权限的远程攻击者通过操作…

网页数据抓取:融合BeautifulSoup和Scrapy的高级爬虫技术

网页数据抓取&#xff1a;融合BeautifulSoup和Scrapy的高级爬虫技术 在当今的大数据时代&#xff0c;网络爬虫技术已经成为获取信息的重要手段之一。Python凭借其强大的库支持&#xff0c;成为了进行网页数据抓取的首选语言。在众多的爬虫库中&#xff0c;BeautifulSoup和Scrap…

1140 分珠

这是一个图的划分问题&#xff0c;可以使用深度优先搜索&#xff08;DFS&#xff09;或广度优先搜索&#xff08;BFS&#xff09;来解决。我们需要找到一种划分方式&#xff0c;使得划分后的两部分总重的差值的绝对值最小。 以下是对应的C代码&#xff1a; #include <iost…

房地产市场2024年展望——深度解读行业趋势

作为一名有十多年经验的地产营销人&#xff0c;对于2024年房地产行业的发展趋势&#xff0c;我认为可以从以下几个方面来探讨&#xff0c;如果觉得对你有帮助&#xff0c;请不吝一个三连&#xff08;赞同喜欢收藏&#xff09; 一、市场调整与分化加剧 在经历了较长时间的市场…

用chatgpt写了个二级导航,我全程一个代码没写,都是复制粘贴

今天心血来潮&#xff0c;让chatgpt给我写个移动端的二级导航菜单&#xff0c;效果如下&#xff1a; 1、两级导航&#xff0c;竖向排列&#xff0c;一级导航默认显示&#xff0c;二级隐藏 2、抽屉伸缩效果&#xff0c;点击一级导航&#xff0c;展开二级导航&#xff0c;再次点…

同步IO、异步IO以及五种网络IO模式

目录 一、同步IO和异步IO 二、五种网络IO模式 1、阻塞IO 2、非阻塞IO 3、IO多路复用 3.1、SELECT 3.2、POLL 3.3、EPOLL 一、同步IO和异步IO 场景1&#xff1a; 小明去打开水&#xff0c;而开水塔此时没有水&#xff0c;小明在现场一直等待开水到来&#xff0c;或者不断…

老牌数据库HRS,三分之二二区以上!| CHARLS等七大老年公共数据库周报(7.10)...

七大老年公共数据库 七大老年公共数据库共涵盖33个国家的数据&#xff0c;包括&#xff1a;美国健康与退休研究 (Health and Retirement Study, HRS)&#xff1b;英国老龄化纵向研究 &#xff08;English Longitudinal Study of Ageing, ELSA&#xff09;&#xff1b;欧洲健康、…

图片转文字的软件,分享3种不同的类型的软件!

在信息爆炸的时代&#xff0c;图片作为一种直观、生动的信息载体&#xff0c;已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;有时候我们可能需要将图片中的文字提取出来&#xff0c;以便于编辑、整理或进一步使用。那么&#xff0c;有哪些实用的图片转文字软件可以…

基于粒子滤波和帧差法的目标跟踪matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 帧差法 4.2 粒子滤波 4.3 粒子滤波与帧差法的结合 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 原重采样方法&#xff1a; 改进重采样方法&#xff1a; 2.算法…

OpenSceneGraph学习笔记

目录 引言第一章&#xff1a;OSG概述一、前言&#xff08;1&#xff09;为什么要学习OSG?&#xff08;2&#xff09;OSG的组成&#xff08;3&#xff09;OSG的智能指针&#xff08;4&#xff09;OSG的安装编译 二、第一个OSG程序&#xff08;1&#xff09;Hello OSG程序&#…

关于升级WIN11后,点击功能面板空白的解决方法

方法一&#xff1a;先试试按下WinX,选择Windows powershell(管理员)&#xff0c;输入sfc /scannow等待系统自动扫描完成后重启系统看看是否修复。 方法二&#xff1a;打开微软Windows11镜像下载官网&#xff1a;Download Windows 11&#xff0c;下载对应版本和语言的ISO系统镜…

人工智能与伦理挑战:多维度应对策略

人工智能技术近年来取得了迅猛发展&#xff0c;广泛应用于医疗诊断、金融分析、教育辅助、自动驾驶等各个领域&#xff0c;极大地提升了生产效率和服务质量&#xff0c;推动了科技进步和商业创新。然而&#xff0c;伴随其普及和应用的泛滥&#xff0c;AI也带来了数据隐私侵犯、…

【银河麒麟操作系统】虚机重启lvs丢失现象分析及处理建议

了解银河麒麟操作系统更多全新产品&#xff0c;请点击访问麒麟软件产品专区&#xff1a;https://product.kylinos.cn 环境及现象描述 40台虚机强制重启后&#xff0c;其中8台虚机找不到逻辑卷导致启动异常&#xff0c;后续通过pvcreate 修复重建pv&#xff0c;激活vg和lv并修复…