我有一个可以进行简单计算的表格,但是数量很大。
示例: xml 96276480 图形2931829760
我已经将数据类型声明为Long,甚至做了CLng(Me.txtGraphics.value),但是我仍然遇到溢出错误 这些数字来自文本框。 这是我的代码:
Dim sgm As Long
Dim XML As Long
Dim prv As Long
Dim base As Long
Dim IETM As Long
Dim Graphics As Long
Dim total As Long
Dim pgCnt As Long
Const CXML = 2.5
Const CSGM = 6
Const CGraphic = 339
Dim pcSGM As Long
Dim pcXML As Long
Dim pcGraphic As Long
If Me.txtSGM.value = "" Then
sgm = 0
Else
sgm = Me.txtSGM.value
End If
If Me.txtXML.value = "" Then
XML = 0
Else
XML = Me.txtXML.value
End If
If Me.txtGraphics.value = "" Then
Graphics = 0
Else
Dim pics As Long
pics = CLng(Me.txtGraphics.value)
Graphics = CLng(pics)
End If
If Me.txtTotal.value = "" Then
base = 0
Else
base = Me.txtTotal.value
End If
prv = base
pcSGM = (CLng(sgm) / 1024) / CSGM
pcXML = (CLng(XML) / 1024) / CXML
pcGraphic = (CLng(Graphics) / 1024) / CGraphic
'total calculated newest SGM & XML values
total = (CLng(pcSGM)) + (CLng(pcXML)) + (CLng(pcGraphic))
感谢您的帮助, 最高
答案 0 :(得分:6)
VBA中的long是32位带符号整数(与VB.Net中的long是64位相反)。因此,它可以容纳的最大值是2147483647。
2931829760显然更大,因此会溢出。
使用Decimal
和CDec
代替Long
和CLng
将其转换为小数,或使用Double
和CDbl
进行转换他们加倍。
CDbl
可能更快,但可能会导致浮点误差问题。
如果您确定代码将仅在Access的64位变体中执行,则还可以使用CLngLng
,它将其转换为LongLong
数据类型(64位)有符号整数