繁体   English   中英

为什么我的变量会导致 Java 溢出?

[英]Why does my variable resut in an overflow in Java?

这是我的代码num1等是int变量

double numProduct1;
 numProduct1 = (num1 * num2 * num3 * num4);

System.out.printf("%.3f ", numProduct1);

输入分别为 (num1,num2,num3,num4): 100000 200000 300000 500000

我的代码会输出-1679818752.000而不是3000000000000000000000.000

您认为将产品分配给double将允许您使用double的整个范围,但事实并非如此。 您只是将结果转换为double 乘法仍然使用int ,并且int范围适用。

本质上,这是这个常见问题的乘法版本(嗯,不完全是:D)。

修复方法类似,只需将第一个操作数double (例如通过强制转换):

numProduct1 = ((double)num1 * num2 * num3 * num4);

该表达式现在是一个double乘以一个int ,并且发生了数字提升,从而将其他数字也提升为double

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM