我有一个从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中检索到的,因此没有被用户编码。
在此先感谢您的帮助!
答案 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))