powerApower
powerApower
采纳率23.1%
2017-08-31 03:55 阅读 6.4k

java 正整数相乘变为负数

5
 System.out.println("系统设置毫秒数"+30*86400000);

系统设置毫秒数-1702967296
这是什么原因呢
怎么解决呢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • lcmsx 乱臣贼子 2017-08-31 05:46

    楼上的都说正确了,整数int的范围如下: -2147483648~2147483647 而你的30*86400000 已经远远超过int 的范围了。就会变为负数。
    你可以去了解下数据类型范围。

    点赞 1 评论 复制链接分享
  • Small_Mouse0 鼠小 2017-08-31 03:58

    数字太大了,,导致首位为1,,,

    像这种比较大的数字,,,用 BigInteger,java官方给出的类,,,相当好用

    点赞 1 评论 复制链接分享
  • wojiushiwo945you 毕小宝 2017-08-31 04:41
    数据过大超出了int的范围,而导致溢出了,大数相乘不能直接用乘法。
    可以用BigDecimal类封装的方法来执行。
    
    点赞 评论 复制链接分享
  • qq_14844131 这局要赢 2017-08-31 05:48

    变成语言的基础知识,还是多看看书把

    点赞 评论 复制链接分享
  • shaobo7705601 伯乐_博 2017-08-31 05:50

    数据太大,直接结果用long就好

    点赞 评论 复制链接分享
  • qq_21454973 我惠依旧 2017-08-31 06:33

    long a = 30;
    long b = 86400000;
    long c = (a *b);
    System.out.println("系统设置毫秒数"+c);

    点赞 评论 复制链接分享
  • qq_24029841 我还不够强 2017-09-01 01:26

    java基础,整数型的范围

    点赞 评论 复制链接分享

相关推荐