代码之家  ›  专栏  ›  技术社区  ›  Siebe Bosch

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

  •  -5
  • Siebe Bosch  · 技术社区  · 6 年前

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

    任何一个像样的计算器都能提供这个问题的答案,那么为什么我会得到OverflowException呢?当我在即时窗口中直接执行它时,也会发生这种情况。

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

    有没有办法解决这个问题?

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

    tsidx 值为12303和 StreamDataBlockSize 值为174596

    screenshot

    1 回复  |  直到 6 年前
        1
  •  1
  •   David Wilson    6 年前

    我猜是吧 tsidx StreamDataBlockSize Integer 类型。最大数字an 整数 可容纳的类型为2147483647。然后,括号中的乘法会得到一个整数结果,但答案超出了 整数 类型。将代码更改为。。

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

    乘法将以 Long 类型