乘法-Java后的双值否定

时间:2011-05-12 16:23:58

标签: java

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

double temp=(c12*fileSize);
  • 这里c12是double,fileSize是double
  • c12的值为1700且
  • fileSize的值为1944038

但在乘法后我得到-990102696

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

6 个答案:

答案 0 :(得分:9)

(int)1700 * (int)1944038等于您的-990102696

您确定c12fileSize不是整数吗?如果是,则乘法发生整数类型,整数溢出,然后将其提升为double

答案 1 :(得分:4)

您的c12和fileSize很可能是整数(+1 Tomasz)。 Java将溢出的整数与负值相乘,然后将负值存储在double中。在乘以之前将c12和fileSize转换为double:

double c12 = 1700, fileSize = 1944038;
System.out.println(c12 * fileSize);

产生:

3.3048646E9

答案 2 :(得分:1)

嗯,我刚尝试过,我得到了“3.3048646E9”。你不应该在double上获得任何溢出回合:如果超过最大值,它应该变成“Infinity”。

我怀疑问题在于你要写的这个号码。或者您可能需要向我们展示更多代码。

答案 3 :(得分:0)

动态加倍:

double temp=(c12*1.0*fileSize);

否则,作为int的c12将乘以另一个int,结果溢出,稍后 - 太晚 - 转换为double。

c12 = 1700.0 
// or 
filesize = 1944038f 

会有所帮助,但文件大小为float / double看起来很可疑。

答案 4 :(得分:0)

    double c12 = 1700;
    double fileSize = 1944038;
    double temp=(c12*fileSize);
    System.out.println(temp);

给出3.3048646E9

我打赌你的c12和fileSize是整数。

答案 5 :(得分:-1)

使用BigDecimal multiply方法代替这样做,以防止在处理大号双数时出现潜在的过度问题

BigDecimal temp = (new BigDecimal(fileSize)).multiply(new BigDecimal(c12));