【发布时间】:2012-08-03 03:13:50
【问题描述】:
这不是一个真正的问题,因为我确实有解决这个问题的办法,但我想我会让每个人都知道,因为它可能会对人们使用 Google Web Toolkit 的方式产生相当广泛的影响。
所以问题之一是Google gson 在 JSON 中表示数字的方式。例如,int myInt = 2 将变为 "myInt":2,long myLong = 5432198765L 将变为 "myLong":5432198765,BigInteger myBI = 1310381093810938109481049128409487109378109248104098130981039810983 将变为 "myBI":1310381093810938109481049128409487109378109248104098130981039810983。虽然 gson 本身可以毫无问题地反序列化它,但 JSON 格式的 GWT 2.4 中的 AutoBeans 框架不会喜欢它。 Issue 6331 为即将发布的 GWT 2.5 版本中的长表示修复了它。但是,issue 7555 将无法解析,因为 Javascript 数字精度的工作方式。
因此,我们需要将 BigIntegers 表示为字符串,它会起作用,例如,String myBIStr = new BigInteger("1310381093810938109481049128409487109378109248104098130981039810983").toString() 将表示为 "myBIStr":"1310381093810938109481049128409487109378109248104098130981039810983"。在 GWT 端,这将产生一个 String,我们将不得不用它构建一个 BigInteger。
为什么 Google 不会解析 7555 完全有道理,但这让我想到了一个真正的悬而未决的问题:如何处理 Javascript 中的高精度数字?
一般来说,如果基于 Web 的 Javascript 和 Google Web Toolkit 前端要挑战原生前端,那么我们可能会使用任意精度数字,而不是受限于大约 53 位精度comment 3 谈到的。更糟糕的是,这个限制不也影响 node.js 或任何其他服务器端 Javascript 吗?
有什么好的解决方法,尤其是使用 Google Web Toolkit 或与 Google Web Toolkit 无缝协作的解决方法?
【问题讨论】:
标签: java javascript gwt arbitrary-precision autobean