2 powerapower powerApower 于 2017.08.31 11:55 提问

java 正整数相乘变为负数 5C
 System.out.println("系统设置毫秒数"+30*86400000);

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

7个回答

Small_Mouse0
Small_Mouse0   Ds   Rxr 2017.08.31 11:58

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

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

lcmsx
lcmsx   2017.08.31 13:46

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

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2017.08.31 12:41
数据过大超出了int的范围,而导致溢出了,大数相乘不能直接用乘法。
可以用BigDecimal类封装的方法来执行。
qq_14844131
qq_14844131   2017.08.31 13:48

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

shaobo7705601
shaobo7705601   2017.08.31 13:50

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

shaobo7705601
shaobo7705601 回复powerApower: 86400000改成86400000L,在把结果写成long
3 个月之前 回复
powerApower
powerApower 用long不行,我试过了
3 个月之前 回复
qq_21454973
qq_21454973   2017.08.31 14:33

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

qq_24029841
qq_24029841   2017.09.01 09:26

java基础,整数型的范围

Csdn user default icon
上传中...
上传图片
插入图片