任意精度数字和Javascript,Google Web Toolkit

Arbitrary precision numbers and Javascript, Google Web Toolkit

本文关键字:Google Web Toolkit Javascript 精度 数字 任意      更新时间:2023-09-26
这不是

一个真正的问题,因为我确实有解决这个问题的方法,但我想我会让每个人都知道,因为它可能会对人们使用Google Web Toolkit的方式产生相当大的影响。

所以问题之一是谷歌gson在JSON中表示数字的方式。例如,int myInt = 2将变得"myInt":2long myLong = 5432198765L将变得"myLong":5432198765BigInteger myBI = 1310381093810938109481049128409487109378109248104098130981039810983将变得"myBI":1310381093810938109481049128409487109378109248104098130981039810983。虽然 gson 本身可以毫无问题地反序列化它,但 JSON 中 GWT 2.4 中的 AutoBeans 框架不会喜欢它。问题 6331 修复了即将发布的 GWT 2.5 版本中的长表示形式。但是,由于 Javascript 数字精度的工作方式,问题 7555 将无法解决。

因此,我们需要将 BigIntegers 表示为字符串,它将起作用,例如,String myBIStr = new BigInteger("1310381093810938109481049128409487109378109248104098130981039810983").toString() 将表示为 "myBIStr":"1310381093810938109481049128409487109378109248104098130981039810983" 。在GWT端,这将产生一个字符串,我们将不得不从中构建一个BigInteger。

谷歌为什么不解析7555是完全有道理的,但这让我想到了一个真正的悬而未决的问题:如何处理Javascript中的高精度数字?

一般来说,如果基于 Web 的 Javascript 和 Google Web Toolkit 前端要挑战原生前端,那么可能会出现我们使用任意精度数字的情况,而不是受到注释 3 所说的 53 位精度的限制。更糟糕的是,这个限制是否也影响node.js或任何其他服务器端Javascript?

有没有一个很好的解决方法,特别是使用或无缝使用Google Web Toolkit的解决方法?

GWT 可以对大于 53 位的整数进行数学运算,因为它模拟 Long(我认为还有 BigInteger(。 数学速度较慢,因为它不能只使用本机JS操作,但没有硬性限制。

因此,GWT 已经实施了解决方法,并且它是内置的。 当您需要大整数时,您只需要避免传递数字 JSON。