【问题标题】:number of type 'long' changes its value when printed in java在 java 中打印时,类型“long”的数量会更改其值
【发布时间】:2015-03-20 09:15:37
【问题描述】:

我解析 JSON 数据,有 book id ,这是一个很大的数字:

"Books":[{"ID":88401542,"Title":"构建和测试 Gradle","SubTitle":"理解下一代 Builds","Description":"构建和测试用 Java 编写的软件和 使用 Gradle 的许多其他语言,开源项目自动化 受到广泛关注的工具。这个简洁的介绍 提供了大量代码示例来帮助您探索 Gradle,两者都作为 b ..."},{"ID":2676913857...}

long book_id = 0 ;
try {
book_id = jsonBook.getInt(BOOK_ID);
Log.v(LOG_TAG, "book id: " + );

它打印出一些愚蠢的负数:

图书编号:-1814548740

是什么原因?可能是因为我在没有铸造的情况下打印它吗? 我的日志语句应该是:

Log.v("book id:" + new Long (book_id)) ;

Log.v("book id:" + new Long (book_id.toString())) ;

Log.v("book id:" + new String (new Long(book_id))) ;

【问题讨论】:

  • 我想你从 JSON 得到的是字符串,所以使用 Long.parseLong
  • Bookid 长期使用getLong
  • @Jens,谢谢我想通了.. 是的,现在可以了!你可以写答案 - 我会接受它))))

标签: java json parsing long-integer


【解决方案1】:

由于您的 Book_ID 是 Long,您应该使用 getLong 来获取值:

book_id = jsonBook.getLong(BOOK_ID);

【讨论】:

    【解决方案2】:

    这个值可能超过了Integer.MAX_VALUE。最好用BigInteger

    BigInteger book_id = BigInteger(jsonBook.getText(BOOK_ID));
    

    我不确定getText() 是否正确,但我的想法是将值作为String 获取。

    【讨论】:

      【解决方案3】:

      我认为你的问题在于:

      book_id = jsonBook.getInt(BOOK_ID);
      

      如果getInt(BOOK_ID) 返回的数字溢出了int 类型,那么您不应该期望它能够正常工作。 (因为方法名我猜到了int)。

      您可以检查您的 JSON API 是否有 getLong 方法,或者存储为字符串,然后使用 Long.valueOfLong.parseLong 等等...

      【讨论】:

      • 嘿,谢谢,我将其更改为 getLong(book-id),现在可以使用...谢谢!
      • 那么您可以接受我的回答:)(并发布您的 JSON API 以便我完成回答)
      • 嗯,我不知道你所说的 json api 是什么意思,json api 作为 json 存在?我正在为网站 it-ebooks.info 编写客户端
      【解决方案4】:

      您使用getInt() 读取long。如果您尝试读取的 long 值大于 int,那么您得到的是正常的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-09
        • 1970-01-01
        • 2012-05-26
        • 1970-01-01
        • 1970-01-01
        • 2014-04-01
        • 2020-11-10
        • 2022-09-27
        相关资源
        最近更新 更多