javascript - GWT 的 JSONParser 生成错误的数字值

标签 javascript json gwt eval

我正在使用 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/

相关文章:

javascript - Node.js:创建 "scrolling window + textarea"控制台应用程序的最简单方法?

java - 线程 "main"java.lang.NoClassDefFoundError : com/fasterxml/jackson/annotation/JsonAutoDetect Error when trying to convert json to POJO 中的异常

c# - 使用 http 方将 json 发送到 web api

javascript - 隐藏/显示时 Div 太宽

Chrome 示例扩展中的 Javascript for...in 循环

json - 将 Grunt 应用程序部署到 heroku 时,NPM 不会安装模块依赖项

java - 如何在 GWT 中使用 websocket

java - 实现用户可以一起交互的网站的最佳方式是什么

GWT MVP 导航边栏

javascript - 过滤数据然后显示路径的搜索框?