在我的代码中,我有以下行。
double temp=(c12*fileSize);
但在乘法后我得到-990102696
。
任何人都可以帮助我吗?有些尺寸限制出错吗?
答案 0 :(得分:9)
(int)1700 * (int)1944038
等于您的-990102696
。
您确定c12
和fileSize
不是整数吗?如果是,则乘法发生整数类型,整数溢出,然后将其提升为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 :(得分: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));