这不是一个真正的问题,因为我确实解决了这个问题,但我想我会让每个人都知道,因为它可能会对人们使用 Google Web Toolkit 的方式产生相当广泛的影响。
所以问题之一是谷歌 gson在 JSON 中表示数字的方式。例如,int myInt = 2
将成为"myInt":2
,long myLong = 5432198765L
将成为"myLong":5432198765
,BigInteger 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 无缝协作的解决方法?