2012-01-27 129 views
0

我想在vb中执行一个简单的乘法。数学计算在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

这取决于数量是如何初始化的。如果我们不知道“数量”是多少,我们如何回答你的问题? – 2012-01-27 15:09:48

回答

7

您将minusPrice声明为整数,因此它已经舍入了您的结果。

你需要......

Dim minusPrice As Decimal 
Dim totalPrice As Decimal 

或双...或浮动,根据您的需要。价格通常是十进制的。

---编辑---

只注意到我错过了一个重要的部分:

minusPrice = ((minus) * (0.3m)) 

除非0.3也表示为小数,你可能会得到小舍入误差。

+0

+1;另外,从totalPrice看起来应该也可以是小数。 – vcsjones 2012-01-27 15:09:17

+0

@vcsjones谢谢,纠正了这一点。 – perfectionist 2012-01-27 15:16:26

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 
+0

感谢它现在的作品 – 2012-01-27 15:10:37

+0

很高兴我能帮上忙。如果它有用,请接受答案。 – 2012-01-27 15:12:36

0
dim minusprice as integer 

这意味着,当您通过0.3乘以你正在做的整数乘法。 .3的整数部分是0,所以有些东西* 0 = 0.将您的代码改为。

dim minusprice as single 
0

正如你所宣布minusPrice作为Integer,它不能包含分数。计算正确完成,但它被转换为整数。

发生了什么事的代码实际上是:

minusPrice = CInt(CDbl(minus) * 0.3) 

如果声明minusPriceDoubleDecimal相反,测算的结果将不会被转换。

Double类型用于正规浮点运算。精确度存在固有的局限性,您应该注意,但如果您只是用它来显示价格,那就足够了。

类型Decimal是一个定点数据类型,这意味着它可以精确地表示小数值。如果你需要严肃地记录货币价值,这就是你应该使用的。