为什么这个乘法会导致OverflowException?

时间:2018-01-31 11:12:27

标签: vb.net exception overflow multiplication

我的代码试图将12303乘以174596。

任何体面的计算器都能够为此提供答案,那么为什么我会遇到OverflowException?当我直接在立即窗口中执行它时也会发生这种情况。

代码用于确定二进制文件中某个值的位置。文件本身的大小为7 Gb。

有什么方法可以解决这个问题吗?

Dim position As Long = hisFileHeader.StreamStartDataPosition + 
  (TSIdx * hisFileHeader.StreamDataBlockSize)

tsidx的值为12303,StreamDataBlockSize的值为174596

screenshot

1 个答案:

答案 0 :(得分:1)

我猜测tsidxStreamDataBlockSizeInteger类型。 Integer类型可以容纳的最大数字是2,147,483,647。然后使用括号中的乘法期望整数结果,但答案超出Integer类型的范围。将您的代码更改为..

Dim position As Long = hisFileHeader.StreamStartDataPosition + (CLng(TSIdx) * hisFileHeader.StreamDataBlockSize)

并且乘法将以期望Long类型完成。