我正在尝试在vb中执行简单的乘法。
以下是我的代码:
Dim minus As Integer
Dim minusPrice As Integer
Dim totalPrice As Integer
If quantity > 20 Then
minus = quantity - 20
minusPrice = ((minus) * (0.3))
MsgBox("Minus " + minus.ToString)
MsgBox("minusPrice " + minusPrice.ToString)
totalPrice = 30 + minusPrice
End If
但为什么“minusPrice”给我0? 它应该给我“0.3”。
答案 0 :(得分:7)
您将minusPrice声明为整数,因此它会对结果进行舍入。
你需要......
Dim minusPrice As Decimal
Dim totalPrice As Decimal
或Double ...或浮动,视您的需要而定。价格通常是十进制的。
---编辑---
注意到我错过了一个至关重要的部分:
minusPrice = ((minus) * (0.3m))
除非0.3也表示为小数,否则可能会出现小的舍入误差。
答案 1 :(得分:3)
minusPrice
被声明为Integer
,它只包含小数点前的部分。为了能够存储小数值,您需要使用类型Decimal
。 totalPrice
也是如此。
Dim minus As Integer
Dim minusPrice As Decimal
Dim totalPrice As Decimal
If quantity > 20 Then
minus = quantity - 20
minusPrice = ((minus) * (0.3))
MsgBox("Minus " + minus.ToString)
MsgBox("minusPrice " + minusPrice.ToString)
totalPrice = 30 + minusPrice
End If
答案 2 :(得分:0)
dim minusprice as integer
这意味着当你乘以.3时,你正在进行整数乘法运算。 .3的整数部分为0所以* 0 = 0。将代码更改为。
dim minusprice as single
答案 3 :(得分:0)
由于您已将minusPrice
声明为Integer
,因此它不能包含分数。计算正确完成,但随后转换为整数。
代码中发生的事实是:
minusPrice = CInt(CDbl(minus) * 0.3)
如果您将minusPrice
声明为Double
或Decimal
,则不会转换计算结果。
类型Double
用于regual浮点运算。您应该注意固有的精度限制,但如果您只是为了显示价格而使用它,那就足够了。
类型Decimal
是固定点数据类型,这意味着它可以精确地表示小数值。如果您需要以严肃的方式跟踪货币价值,那么您应该使用这一点。