我正在使用 GWT 并解析来自返回 DataTable 的 ASP.NET Web 服务方法的 JSON 结果。我可以将结果解析为 JSONvalue/JSONObject 。我遇到的问题是 DECIMAL(20, 0) 中的一列和解析为 JSON 的值不准确。为了演示不需要 WS 调用,我在 GWT 中将其放在一起:
String jsonString = "{value:4768428229311981600}";
JSONObject jsonObject = JSONParser.parse( jsonString ).isObject();
Window.alert( jsonObject.toString() );
这又会发出警报:
{"value":4768428229311982000}
我了解到 GWT 的 JSONParser 只是使用 eval() 进行解析,所以这是我从未意识到的 JavaScript 的某种数字/精度问题。我承认我在 JavaScript 中处理数字的次数不多,我也许可以通过更改 .NET WebService 以将此列作为字符串返回来解决此问题,但我真的不想这样做。
感谢您的帮助。
最佳答案
我之前回答过一个类似的问题 - Arbitrary precision in GWT
最新的答案是 GWT 2.1 的 BigDecimal 支持看起来已步入正轨
在那之前,如果您不需要在客户端对数字进行计算,我建议将它们作为字符串传递。
此外,看看您的示例,您可以将它们作为字符串传输,并且可能使用模拟的 GWT java.lang.Long。
最后,你可以尝试 svn 版本的 BigDecimal GWT-Math - 将 java 文件放入 jar 中应该不会那么糟糕(不需要编译,因为它都是 emul 代码)
如果您采用这种方式,您仍然需要将数字作为 JSON 字符串传递,但您可以执行有意义的数学运算。
关于javascript - GWT 的 JSONParser 生成错误的数字值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2518331/