解决页面js接受Long型损失精度问题(最新解决方案)

解决页面JS接受Long型损失精度问题(最新解决方案)

在前后端分离的架构下,我们经常需要通过网络传输Long类型的数据,在前端进行处理。但是,由于JS中Number类型采用IEEE 754双精度浮点数表示,会存在精度损失的问题。而Long类型的数据更倾向于采用Java或C++等强类型语言进行处理,因此我们需要找到一种前端解决方案。

方案一:采用BigInt

BigInt是JS的一个新类型,用于表示任意长度的整数。在ES10中引入,Chrome从67版本开始支持。我们可以将Long类型数据打包为64个二进制位,通过BigInt实例化转换为JS的BigInt类型,从而避免精度损失。

function fromLong(long) {
  let buffer = new ArrayBuffer(8);
  let dataView = new DataView(buffer);
  dataView.setBigUint64(0, long);
  let low = dataView.getUint32(0);
  let high = dataView.getUint32(4);
  let result = BigInt(high * 0x100000000 + low);
  return result;
}

let longVal = 17285819855;
let bigIntVal = fromLong(longVal);
console.log(bigIntVal); // BigInt("17285819855")

方案二:采用字符串

另一个常见的方案是将Long型数据转换为字符串,比较推荐的转换方式是将数值转换为十六进制,然后进行前/后端之间的传输。前端收到后端数据后,再将字符串转换为JS中的Number类型。

let longVal = 17285819855;
// 转换为16进制字符串
let hexString = longVal.toString(16);
console.log(hexString); // "feeda22f"

// 传输过程中hexString可能会被截断
// 传输后,将hexString转换为Long
let longValFromHex = BigInt("0x" + hexString);
console.log(longValFromHex); // BigInt("17285819855")

两种方案的具体选择要根据业务需求和兼容性等方面因素综合考虑。以上是本文的完整攻略,希望能对大家有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决页面js接受Long型损失精度问题(最新解决方案) - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 谈谈JavaScript数组常用方法总结

    谈谈JavaScript数组常用方法总结 1. 什么是JavaScript数组 JavaScript数组可以理解为一组有序的数据集合,可以存储任意类型的数据,包括数字、字符串、对象、函数等等。数组是JavaScript中最常用的数据结构之一,因为它能够快速方便地对数据进行排序、搜索、过滤、截取等操作。 2. JavaScript数组常用方法 下面列举了一些常…

    JavaScript 2023年5月18日
    00
  • 12个提高JavaScript技能的概念(小结)

    下面我将详细讲解“12个提高JavaScript技能的概念(小结)”的完整攻略。 1. 箭头函数 箭头函数是 ES6 中的新语法,它可以让我们更方便、简洁地创建函数,而且还有一些特殊的作用域规则。箭头函数的语法示例如下: const sum = (a, b) => a + b; 在上面的示例中,我们定义了一个名为 sum 的箭头函数,它接受两个参数 a…

    JavaScript 2023年5月18日
    00
  • js全选实现和判断是否有复选框选中的方法

    JS全选的实现可以分为两个部分:全选和全不选。下面是具体的实现方法和示例说明: 一、全选/全不选 1.1 HTML代码 在HTML代码中需要添加一个全选/全不选的复选框,和其他需要操作的复选框: <input type="checkbox" id="checkAll">全选/全不选 <input ty…

    JavaScript 2023年6月10日
    00
  • js入门之Function函数的使用方法【新手必看】

    JS入门之Function函数的使用方法 什么是Function函数 在JavaScript中,函数是一种可重复使用的代码块,用于执行特定的任务。Function函数是最常用的一种函数类型,是一种可执行的JavaScript代码块,可以接受输入并返回输出。它通常被用于将代码结构化,使之易于阅读和维护。 Function函数的语法 function funct…

    JavaScript 2023年5月27日
    00
  • 基于 Immutable.js 实现撤销重做功能的实例代码

    基于 Immutable.js 实现撤销重做功能,你需要按照以下步骤: 第一步:安装 Immutable.js 安装Immutable.js,可以通过npm或者yarn包管理工具进行安装,命令如下: #npm npm install immutable #yarn yarn add immutable 第二步:实现历史记录状态管理 实现撤销重做功能,需要用到…

    JavaScript 2023年6月11日
    00
  • JS实现网页标题栏显示当前时间和日期的完整代码

    下面我为你讲解一下 JS 实现网页标题栏显示当前时间和日期的完整代码攻略。 首先,我们需要了解两个 Javascript 方法:setInterval() 和 toLocaleTimeString()。 setInterval() 方法会以指定的时间间隔(以毫秒为单位)重复调用某个函数。可用于创建定期执行的函数(也称为时间间隔函数)。 toLocaleTim…

    JavaScript 2023年5月27日
    00
  • JS读取XML文件示例代码

    下面是JS读取XML文件的完整攻略。 一、读取XML文件的基本原理 在JS读取XML文件时,可以通过以下步骤实现: 创建一个 XMLHttpRequest对象; 打开文件并发送请求; 监听请求状态; 接收响应; 解析XML数据。 在以上步骤中,创建XMLHttpRequest对象和打开文件并发送请求的方法是固定的,而解析XML数据则需要使用不同的方法,这取决…

    JavaScript 2023年5月27日
    00
  • js实现将json数组显示前台table中

    非常好的问题。下面是“js实现将json数组显示前台table中”的完整攻略,包括两条示例说明。 使用JS将JSON数组显示在前台的Table中 步骤一:获取JSON数据 在此示例中,我们将使用一个包含JSON数据的外部文本文件,文件名为”data.json”。该JSON文件以数组形式存储数据,并具有以下数据字段:Name、Age、Gender。 为了将其读…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部