VBA小数乘整数时去掉小数点

VBA drops the decimal point when multiplying decimal with whole number

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

一个典型的例子是:

按理说,我要的是Tot = 10.45*1 = 10.45。但是 VBA 给我 1045 没有小数点。

我浏览了论坛并看到了一些建议(转换为小数、使用模数、声明双精度、单精度、浮点数……)但结果没有改变。

我使用的代码是这样的:

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

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

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

在此先感谢您的帮助!

如果 Me.lblPU 是 return 数值的字符串表示形式,其中小数点使用逗号表示(可能是由于区域设置),那么 CDec 将return 1045 而不是 10.45,观察:

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

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

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

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

首先,字段被命名为标签非常混乱。

然后,使用变量缩短它:

Dim TruePrice As Currency

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

在评论中写这个会很乱。不将字符串解析为小数,直接使用小数:

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))