【问题标题】:JsonSlurper float precision issueJsonSlurper 浮点精度问题
【发布时间】:2016-04-06 10:31:54
【问题描述】:

我有一个包含一些数据和配置参数的文件,在我将其用作 POST 休息调用的主体数据之前,我需要更改这些文件。

所以我使用slurper来获取配置值

JsonSlurper slurper = new JsonSlurper()
def inputFile = new File("file.json")
def parsedInput = slurper.parse(inputFile)

然后我更改所需的配置参数

parsedInput.config.id = 1

然后将修改后的输入文件写入临时文件

def tempFile = new File("temp.json")
tempFile.write(JsonOutput.toJson(parsedInput))

当我意识到输出文件比输入文件大三倍时,我感到非常惊讶。我检查了内容,看起来 slurper 改变了浮点精度。

修改前

0.145,
0.144,
0.145,

修改后

0.1459999999999999908961711980737163685262203216552734375, 
0.1449999999999999900079927783735911361873149871826171875, 
0.1459999999999999908961711980737163685262203216552734375

有什么解决办法吗?

编辑 1:添加了一些输入数据

http://wklej.org/hash/4de6639a5bf/txt/

【问题讨论】:

  • 你有一些示例输入 json 吗?
  • 添加了输入文件的链接
  • @user2847328 说真的,这是你能想到的最好的例子吗?一个庞大的文件?此处粘贴的四行表明该问题会比异地 json 的 Megs 更好,当其他人稍后遇到相同问题并发现此问题时,它可能不再存在...
  • 这是我在脚本中使用的实际文件,我刚刚删除了一些在这种情况下无用的数据。

标签: json groovy jsonslurper


【解决方案1】:

检查你的 groovy 版本,应该在 2011 年底之前修复 (https://issues.apache.org/jira/browse/GROOVY-5129)

【讨论】:

  • 我使用的是 groovy-2.4.5
  • @user2847238 检查类型,是 BigDecimal 还是 Double
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
相关资源
最近更新 更多