在 MS Access VBA 中添加两个等于零的变量时出现奇怪的结果

Posted

技术标签:

【中文标题】在 MS Access VBA 中添加两个等于零的变量时出现奇怪的结果【英文标题】:Strange results when adding two variables in MS Access VBA that equal Zero 【发布时间】:2013-02-22 18:30:07 【问题描述】:

我的 VBA MSAccess 平台中有一个例程让我感到困惑。 我所做的只是在遍历记录集时汇总一个金额字段。

我已经声明了一个名为 TempAmount 的变量(它在我们循环时保存总数)。 表中的字段名称在名为 rsBilled 的记录集中称为 BilledAmount。

循环开始时,TempAmount 为零。随着循环的进行,我们将 BilledAmount 添加到 TempAmount。

这是代码的模型。

Dim TempAmount as Double
TempAmount = 0


While NOT rsBilled.EOF
   TempAmount = TempAmount + rsBilled.Fields("BilledAmount")

rsBilled.MoveNext

Wend

(然后我们将 TempAmount 写入另一个包含 Totals 的表。)

现在一切正常。除非 TempAmount 和 BilledAmount 的金额相反,从而产生零。 换言之,如果 TempAmount 为 15.25 且 BilledAmount = -15.25,则结果应为零。但这不会发生。相反,我得到了一些疯狂的扩展符号值,例如 2.123423523E-10。

同样,只有当结果等于零时才会发生这种情况,因为正值被添加到相反的负值上。

有什么线索吗?

【问题讨论】:

【参考方案1】:

您已将TempAmount 声明为double,因此您处理的是浮点数,而不是定点数。

TempAmount 声明为currency

【讨论】:

当然。如果您想让帐户满意,有时最好在写入货币之前使用格式进行四舍五入。【参考方案2】:
Dim TempAmount as Double 
TempAmount = 0

While NOT rsBilled.EOF 
TempAmount = Round(TempAmount,4) + Round(rsBilled.Fields("BilledAmount"),4)
rsBilled.MoveNext
Wend

【讨论】:

以上是关于在 MS Access VBA 中添加两个等于零的变量时出现奇怪的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行时使用 VBA 将按钮添加到 MS Access 表单并将代码添加到 _Click() 事件

在大型 VBA/MS Access 项目中查找语法错误

MS Access 将 xslt 嵌入到 vba

使用 MS Access VBA 在 .xlsx 文件中插入一行...如何避免损坏文件?

如何在 MS Access VBA 上将文本框注释值输入设置为表格数据插入

从 MS Access VBA 前端在 SQL 中使用 SESSION_CONTEXT