VBA小数乘整数时去掉小数点
VBA drops the decimal point when multiplying decimal with whole number
我有一个从 Access table 检索价格金额的用户表单。价格可以是小数。要计算一条线的总价格,我必须将它乘以数量。
一个典型的例子是:
Price = 10.45
Quantity = 1
按理说,我要的是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))
我有一个从 Access table 检索价格金额的用户表单。价格可以是小数。要计算一条线的总价格,我必须将它乘以数量。
一个典型的例子是:
Price = 10.45
Quantity = 1
按理说,我要的是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))