1

这不是一个真正的问题,因为我确实解决了这个问题,但我想我会让每个人都知道,因为它可能会对人们使用 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 或与 Google Web Toolkit 无缝协作的解决方法?

4

1 回答 1

3

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

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

于 2012-08-03T13:17:01.023 回答