解决页面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日

相关文章

  • js 定义对象数组(结合)多维数组方法

    JS中对象数组是一种常用的数据结构,用于存储一组具有相同特征的数据。当多个对象数组需要结合起来使用,就需要使用多维数组。 定义多维数组的方法: var multiArray = []; // 定义一个空的多维数组 // 定义一个含有两个元素的一维数组,每个元素是一个对象数组 multiArray[0] = [{name: ‘张三’, age: 20}, {n…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript中setSeconds()方法的使用

    下面是详解JavaScript中setSeconds()方法的使用的完整攻略: setSeconds()方法 setSeconds()方法是JavaScript日期时间对象中的一个方法,它用于设置秒数值。使用该方法可以更改日期对象的秒数,并返回该日期对象的毫秒数值。 语法 setSeconds(secondsValue[, msValue]) 参数 seco…

    JavaScript 2023年5月27日
    00
  • javascript针对DOM的应用分析(五)

    “javascript针对DOM的应用分析(五)”是一篇关于Javascript框架的技术分析文章,主要讲解了如何使用Javascript操作DOM(Document Object Model)。以下是完整攻略。 一、DOM是什么 DOM是文档对象模型(Document Object Model)的缩写,用于描述HTML和XML文档的程序接口。通过 DOM,…

    JavaScript 2023年6月10日
    00
  • JavaScript中检测数据类型的四种方法

    当我们在进行 JavaScript 的开发时,必须经常检测数据类型以确保代码的正确性。本文将介绍 JavaScript 中检测数据类型的四种方法。 方法一:typeof 操作符 typeof 操作符用于检测变量的数据类型,返回一个字符串,表明该变量的数据类型。 console.log(typeof ‘Hello World’); // string cons…

    JavaScript 2023年6月10日
    00
  • Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别

    一、Jsonp 关键字详解1. Jsonp的全称是“JSON with Padding”,即“带填充的JSON”。2. Jsonp是一种跨域请求方式,允许在不同域之间请求数据,常用于跨域解决方案。3. Jsonp的原理是利用script标签的src属性可以跨域加载资源的特性,通过在url中加入callback参数,将回调函数名传递给服务端,服务端返回一小段j…

    JavaScript 2023年5月27日
    00
  • 详解优化iOS程序性能的25个方法

    详解优化iOS程序性能的25个方法: 1. Instruments使用的基本步骤 使用Instruments工具来帮助我们检测iOS程序的性能表现是一种非常有帮助的方法,开发者可以通过这个工具来检测出程序中的瓶颈并对其进行优化。 使用Instruments工具的基本步骤为: 打开Xcode,选择路径Xcode->Open Developer Tool-…

    JavaScript 2023年6月11日
    00
  • 详解JavaScript中的自定义事件编写

    下面我将详细讲解“详解JavaScript中的自定义事件编写”的完整攻略,帮你了解如何自定义事件编写。 什么是自定义事件? 在JavaScript中,我们可以通过addEventListener方法来添加事件,如click,mousemove等。不过,有时候我们需要自定义事件,以便我们可以在我们指定的时间点上执行我们的代码。 自定义事件是指在JavaScri…

    JavaScript 2023年6月10日
    00
  • Vue Element前端应用开发之开发环境的准备工作

    下面是“Vue Element前端应用开发之开发环境的准备工作”的完整攻略。 准备工作 在开始Vue Element前端应用开发之前,我们需要做一些准备工作。这些准备工作包括: 安装Node.js和npm 安装Vue CLI 创建项目 下面我们来详细介绍这些准备工作。 安装Node.js和npm Node.js是一个JavaScript的运行环境,它能帮我们…

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