vb.net - 关于简单除法和乘法的 VB 算术溢出
问题描述
我在编码应用程序方面还是新手,我正在尝试为我玩的游戏制作一个战斗计算器。我已经完成了大部分用户输入和数学运算,但是一旦达到某个点,我就会发生溢出,即使将我的变量更改为 Int64 也是如此。
故障线是:
damagedealt1 = dcfleet1hp / darmadahp * armadadmg
举例来说,用户输入船舶数量和船舶类型,软件根据这些输入计算值。以下是与此代码相关的行:
'Fleet 1'
fleet1hp = fleet1hp + fleet1hpboost
fleet1dmg = fleet1dmg + fleet1dmgboost
cfleet1hp = fleet1hp * fleet1count
cfleet1dmg = fleet1dmg * fleet1count
'D Fleet 1'
dfleet1hp = dfleet1hp + dfleet1hpboost
dfleet1dmg = dfleet1dmg + dfleet1dmgboost
dcfleet1hp = dfleet1hp * dfleet1count
dcfleet1dmg = dfleet1dmg * dfleet1count
'Fleet 2'
fleet2hp = fleet2hp + fleet2hpboost
fleet2dmg = fleet2dmg + fleet2dmgboost
cfleet2hp = fleet2hp * fleet2count
cfleet2dmg = fleet2dmg * fleet2count
'D Fleet 2'
dfleet2hp = dfleet2hp + dfleet2hpboost
dfleet2dmg = dfleet2dmg + dfleet2dmgboost
dcfleet2hp = dfleet2hp * dfleet2count
dcfleet2dmg = dfleet2dmg * dfleet2count
'Text Fields Assignation'
tfleet1.Text = fleet1type
tfleet1count.Text = fleet1count
tfleet1hp.Text = cfleet1hp
tfleet1dmg.Text = cfleet1dmg
tfleet2.Text = fleet2type
tfleet2count.Text = fleet2count
tfleet2hpp.Text = cfleet2hp
tfleet2dmg.Text = cfleet2dmg
'Armada HP Calculations'
armadahp = cfleet1hp + cfleet2hp
armadadmg = cfleet1dmg + cfleet2dmg
darmadadmg = dcfleet1dmg + dcfleet2dmg
darmadahp = dcfleet1hp + dcfleet2hp
'Individual Fleet DMG Calculation'
'Broken Code Here'
damagedealt1 = dcfleet1hp / darmadahp * armadadmg
damagedealt2 = dcfleet2hp / darmadahp * armadadmg
damagetaken1 = cfleet1hp / armadahp * darmadadmg
damagetaken2 = cfleet2hp / armadahp * darmadadmg
以下是变量的定义:
fleet1hp = A single ship in attacking fleet 1's HP
fleet1dmg = A single ship in attacking fleet 1's DMG
cfleet1hp = The HP combined of all ships in attacking Fleet 1
cfleet1dmg = The DMG combined of all ships in attacking Fleet 1
(then all the same with a 'd' before variable to denote defending fleets)
armadahp = The total HP of all Fleets of attacker
darmadahp = The total HP of all fleets of defender
damagedealt1 = Would be the total damage taken by a single fleet
这里的想法是,受到的伤害等于舰队 hp 除以所有舰队 hp 乘以受到的伤害
这是这条线应该做什么:
damagedealt1 = dcfleet1hp / darmadahp * armadadmg
但是这条线会导致
System.OverflowException: '算术运算导致溢出。'
解决方案
在线评论。
'As near as I can make out this is how
'you declared your variable
Dim darmadahp As Int64
Dim armadadmg As Int64
Dim dcfleet1hp As Int64
Dim damagedealt1 As Decimal
'Always check for division by zero
If darmadahp * armadadmg <> 0 Then
'Option Strict (which should always be on) requires the CDec
damagedealt1 = CDec(dcfleet1hp / (darmadahp * armadadmg))
End If
推荐阅读
- javascript - 如何使用我的代码修复此错误?类型错误无法读取 null 的属性?
- javascript - JavaScript / PHP:动态更新给定表格行中的两个输入的字段
- cdi - @Produces CDI 注释为每个请求创建 4 个不同的对象
- php - 生成的邮件表单在 Wordpress 中不起作用
- java - java swing动态添加自定义按钮
- db2 - 如何在不同的服务器上使用 db2expc 或 db2dec 许可证进行 db2 备份和恢复并自动调整无限表空间以避免 SQL1139n
- c++ - 为什么两个 const int 对象在“const”强制转换后具有相同的地址但不同的值?
- python - 如何在不使用 csv/feather/parquet 文件的情况下将 pandas 数据框传递给 R?
- firebase - Firebase Functions 系统设计 - Cloud Firestore 触发器或 HTTP 触发器
- rust - 如何在不克隆的情况下获取对可变单例中数据的引用?