将小数乘以整数时,VBA会舍弃小数点

时间:2019-06-19 22:24:21

标签: vba ms-access access-vba decimal modulus

我有一个从Access表检索价格金额的用户窗体。价格可以是小数。要计算一条线的总价格,我必须将其乘以数量。

一个典型的例子是:

  • Price = 10.45
  • Quantity = 1

从逻辑上讲,我想要的是Tot = 10.45*1 = 10.45。但是VBA给我1045没有小数点。

我浏览了整个论坛,看到了一些建议(转换为小数,使用模数,声明为double,single,float等),但结果没有改变。

我正在使用的代码如下:

Me.lblPU = (rs!price - (rs!price  * (5 / 100)))
Me.lblPriceTot = (CDec(Me.lblPU) * CDec(Me.Qty))

字段lblPU给出了正确的数字:10.45 但是字段lblPriceTot的结果是1045

我没有对此字段声明任何变量,因为它们实际上是从Access中检索到的,因此没有被用户编码。

在此先感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

如果Me.lblPU返回数值的字符串表示形式,其中用逗号表示小数点(可能由于区域设置),则CDec将返回1045 10.45之内,请注意:

?CDec("10.45")
 10.45 
?CDec("10,45")
 1045 

我建议避免任何潜在的字符串转换,并直接使用数值,例如:

Me.lblPriceTot = 0.95 * rs!price * CDec(Me.Qty)

与数量字段类似,使用rs!quantity(如果存在)。

答案 1 :(得分:0)

首先,将字段命名为标签非常令人困惑。

然后,使用变量将其简化:

Dim TruePrice As Currency

TruePrice = price * (1 - 5 / 100)
Me!lblPU.Value = TruePrice
Me!lblPriceTot.Value = TruePrice * Me!Qty.Value

答案 2 :(得分:0)

在评论中写这将是一团糟。不用将字符串解析为十进制,而是直接使用十进制值:

Me.lblPU = (rs!price - (rs!price  * (5 / 100)))
Me.lblPriceTot = ((rs!price - (rs!price  * (5 / 100))) * CDec(Me.Qty))

或者:

dim price as decimal = (rs!price - (rs!price  * (5 / 100)))
Me.lblPU = price
Me.lblPriceTot = (price * CDec(Me.Qty))