excel - Visual Basic 中的溢出:数据类型使用
问题描述
VBA 程序需要对超过 100 的数字执行阶乘。我想知道是否有一种数据类型可以处理这么大的数字,或者我是否必须简化组合问题。
使用的等式是一个简单的组合,即 n!/(r!*(nr)!)。我应该简化这个问题以获得结果,还是可以处理数字的数据类型就足够了。
Private Sub CommandButton1_Click()
Dim j As Integer, c As Integer, b As Integer, p As Single, val As Long
c = 100
b = 105
p = 0.9
For j = c + 1 To b
val = fact(b) / (fact(j) * fact(b - j))
Cells(2, j - 100).value = val
Next j
End Sub
Public Function fact(x As Integer) As Long
Dim facts As Long, k As Integer
For k = 1 To x
facts = facts * x
Next k
Exit Function
End Function
我期望给定组合的输出,但显示的错误是运行时错误“6”溢出。
解决方案
fact
即使您将 Long 更改为 Double ,该函数也会出现一些错误:
- 未初始化的事实
- 未返回调用函数的事实
所以它应该看起来像这样:
Sub test()
Dim j As Integer, c As Integer, b As Integer, p As Single, val As Double
c = 100
b = 105
p = 0.9
For j = c + 1 To b
val = fact(b) / (fact(j) * fact(b - j))
Cells(2, j - 100).Value = val
Next j
End Sub
Public Function fact(x As Integer) As Double
Dim facts As Double, k As Integer
facts = 1
For k = 1 To x
facts = facts * k
Next k
fact = facts
End Function
您可以对照 Excel 的Combin
函数检查这一点——它给出了相同的结果。
推荐阅读
- xml - 如何在 golang 中解析 xml.gz
- python - cv2 imread 返回无
- assembly - x86-64 操作数的组装顺序
- neo4j - Neo4j:如何查找给定节点标签的所有属性名称
- java - 使用蜡染将 SVG 文件转换为 PNG 但没有轴线
- javascript - 无法使用构造函数填充 FormData
- javascript - 无法获取 DataTable 中单击行的 .data
- python - 如果大型查询集的条件非常慢
- visual-studio-2017 - Visual Studio 2017 中的 Nuget 安装跳过名为“Windows”的内容文件夹
- google-chrome - 添加到 chrome 按钮未在 chrome 网上商店中显示