乘法-Java后的双值否定

use*_*932 8 java

在我的代码中,我有以下行.

double temp=(c12*fileSize);
Run Code Online (Sandbox Code Playgroud)
  • 这里c12是double,fileSize是double
  • c12的值为1700和
  • fileSize的值为1944038

但是在乘法后我得到了-990102696.

任何人都可以帮助我吗?有些尺寸限制出错吗?

Tom*_*icz 9

(int)1700 * (int)1944038等于你的-990102696.

你确定c12并且fileSize不是整数吗?如果是,则乘以整数类型,整数溢出的现象,而且被晋升为double 以后.


alp*_*ian 4

您的 c12 和 fileSize 很可能是整数(+1 Tomasz)。Java 将整数相乘,导致溢出,变成负值,然后将该负值存储在双精度值中。在相乘之前将 c12 和 fileSize 转换为 double:

double c12 = 1700, fileSize = 1944038;
System.out.println(c12 * fileSize);
Run Code Online (Sandbox Code Playgroud)

产生:

3.3048646E9
Run Code Online (Sandbox Code Playgroud)