【发布时间】:2021-12-05 12:53:51
【问题描述】:
我编写了一个程序来计算1 和100 之间奇数的乘积。那么为什么改变数据类型会给我一个完全不同的输出呢?为什么我使用int时输出为负数?此外,其他结果似乎很奇怪。
代码:
long total = 1L;
for (int i = 1; i <= 100; i++) {
if (i % 2 != 0) {
total *= i;
}
}
System.out.println(total);
不同情况下的输出:
5196472710489536419(如果总数为long)
-373459037(如果总数为int)
2.7253921397507295E78(如果总数为double)
无穷大(如果总数为float)
【问题讨论】:
-
另外,您可能希望在
for循环内添加一个System.out.println(total);,以查看在执行for循环时值如何变化。 -
这能回答你的问题吗? Overflow occurs with multiplication
-
@QusayAbuAuda
total的实际结果为2725392139750729502980713245400918633290796330545803413734328823443106201171875,但long类型的上限为9223372036854775807,因此无法将结果存储在long类型变量中. -
@QusayAbuAuda 结果也不能保存在
double类型变量中,因为 double 的精度约为 15 位,但这个数字有 ~78 位。double类型变量中的值不能精确地保存该值。
标签: java multiplication