【问题标题】:Why does my long integer change a tiny bit?为什么我的长整数会发生一点点变化?
【发布时间】:2013-06-04 20:48:07
【问题描述】:

在我的 Java servlet 中,每次发出某个请求时,我都会生成一个 64 位整数。然后我将这个长发送到两个方向:

1) 作为对 HTTP Get 调用者的 JSON 编码回复

2) 通过 PHP 脚本导入 MySQL 数据库

1) 像这样工作:数字被添加到 ArrayList(通过 Long.toString())。然后通过 Gson 库将此列表转换为 JSON 字符串。然后它会被 HTTP 响应的 printwriter 打印出来。

2) 运行 PHP 脚本,将 long 参数作为命令行参数传递。然后读取此参数并将其输入到 SQL INSERT INTO 查询中。

最后,这两个数字略有不同。在最后一个示例中,我得到以下信息:

1) -753774083758266880

2) -753774083758266887

我错过了什么?

【问题讨论】:

  • 你调试过各个步骤吗?什么时候改变?
  • 你能确定改变的确切位置吗?
  • 我正在尝试弄清楚如何正确调试它。希望很快会有一些设置。
  • 另外,在某处是否涉及到一些 JavaScript? JavaScript 无法正确处理 longs...(这就是为什么在我的 JSON Schema 演示站点中,我让 JavaScript 发送 将 JSON 显示为字符串!)
  • 不涉及 Javascript。

标签: java php sql rounding long-integer


【解决方案1】:

这不是答案,但评论太长了。

MySQL 表示 bigint 支持来自 -9223372036854775808 的值。

但是,SQLFiddle 上的以下代码:

select cast('-753774083758266880' as signed),
       cast('-753774083758266887' as signed),
       cast('-9223372036854775807' as signed)

返回:

-753774083758266900 -753774083758266900 -9223372036854776000

也许需要限定对非常大的值(正或负)的支持。或者,也许这是这些数字如何在输出中打印的人工制品,与您的问题无关。

注意:它确实正确地采用了这些值的差异,所以这可能只是一个输出问题。

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多