- 主题:不知道是不是Java的一个BUG - 各位大侠看看(已解决)
@Test
public void testOnDivInt() {
int a = 49999911, b = 100000000;
System.out.println( "49999911/100000000=" + 100*a/b + "%" );
int c = 499999, d = 1000000;
System.out.println( "499999/1000000=" + 100*c/d + "%" );
}
执行结果:
49999911/100000000=7%
499999/1000000=49%
------------------------------------------------------------------------------
加分析:
/**
* 输出:49999911/100000000=7%
* 分析:java整数位4字节,共32位,最高位为符号位,所以最大值为2^31-1=2,147,483,647
* 当 49,999,911*100 = 4,999,991,100,大于2^32,已经溢出。溢出后得到的数字为:705,023,804=(4,999,991,100 - 2^32),
* 因此结果为 705,023,804/100,000,000 = 7
*/
--
修改:chzhang7901 FROM 223.104.41.*
FROM 223.104.41.*
运行环境:jdk 1.8.0_181,windows
--
FROM 223.104.41.*
int溢出了吧
【 在 chzhang7901 的大作中提到: 】
: @Test
: public void testOnDivInt() {
: int a = 49999911, b = 100000000;
: ...................
--
FROM 103.107.216.230
Java int是4字节,2^32=4,294,967,296。没溢出
【 在 PaoloMaldini 的大作中提到: 】
: int溢出了吧
:
--
FROM 223.104.41.*
我给你对齐一下:
【 在 chzhang7901 的大作中提到: 】
: 标 题: Re: 不知道是不是Java的一个BUG - 各位大侠看看
: 发信站: 水木社区 (Fri Apr 22 11:00:32 2022), 站内
:
: Java int是4字节,2^32=4,294,967,296。没溢出
4,999,991,100
:
: 【 在 PaoloMaldini 的大作中提到: 】
: : int溢出了吧
: :
:
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 223.104.41.*]
--
FROM 103.107.216.230
大兄弟,你多加了两个零
被除数是1亿。我设置的。
除数接近5000万。
这是我测试 >> 和 & 操作性能时遇到的。
【 在 PaoloMaldini 的大作中提到: 】
: 我给你对齐一下:
: 4,999,991,100
--
FROM 223.104.41.*
你先乘了100
【 在 chzhang7901 的大作中提到: 】
: 大兄弟,你多加了两个零
: 被除数是1亿。我设置的。
: 除数接近5000万。
: ...................
--
FROM 101.86.19.*
java不会出现这么低级的错误
那么谁出的错就显而易见了
【 在 chzhang7901 的大作中提到: 】
: 大兄弟,你多加了两个零
: 被除数是1亿。我设置的。
: 除数接近5000万。
: ...................
--
FROM 49.7.47.*
感谢各位的回复!!
确实是这样,看来不能用int算大数字的比例,因为不乘100会导致最后结果总是零。
这里得用double,才不会出现这种问题。
【 在 guestking 的大作中提到: 】
: 你先乘了100
--
修改:chzhang7901 FROM 223.104.41.*
FROM 223.104.41.*
你不是自己写了*100么?
。。
【 在 chzhang7901 的大作中提到: 】
: 大兄弟,你多加了两个零
: 被除数是1亿。我设置的。
: 除数接近5000万。
: ...................
--
FROM 103.107.216.230