【问题标题】:Why does this multiplication cause an OverflowException?为什么这种乘法会导致溢出异常?
【发布时间】:2018-07-10 11:32:05
【问题描述】:

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

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

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

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

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

tsidx 的值为 12303,StreamDataBlockSize 的值为 174596

【问题讨论】:

  • 一些代码及其中断的地方会有所帮助
  • 代码语言?
  • 用VB.Net编写

标签: vb.net exception overflow multiplication


【解决方案1】:

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

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

并且乘法将在 Long 类型的期望下完成。

【讨论】:

  • 太棒了。非常感谢!
  • 如果某个答案解决了您的问题,请不要忘记单击答案旁边的勾号 - 它可以确保用户获得声誉积分,并使其他有相同问题的人更容易看看你的问题有一个可以接受的答案,也可能对他们有用。 (顺便说一句,回答问题的人会获得声誉积分)我不是一个积分瘾君子,但这是一个养成的好习惯。
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
相关资源
最近更新 更多