2012-01-27 14 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

「量」がどのように初期化されるかによって異なります。あなたは「量」がどれほどであるかわからない場合、あなたの質問に答えることができますか? –

答えて

7

minusPriceを整数として宣言したため、結果が丸められました。

あなたは、あなたのニーズに応じて、...

Dim minusPrice As Decimal 
Dim totalPrice As Decimal 

またはダブル...またはfloatを必要とします。価格は通常10進数です。 0.3ない限り

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

また、あなたが小さな丸め誤差を得ることができ、小数点以下のように表される。

---編集---ちょうど私が重要な部分を逃したことに気づきました。

+0

+1;加えて、 'totalPrice'の外観からはおそらく小数点以下にするべきでしょう。 – vcsjones

+0

@vcsjonesありがとう、それを修正しました。 – perfectionist

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

ありがとうございました –

+0

うれしいです。役に立つと思ったら答えを受け入れてください。 –

0
dim minusprice as integer 

これはあなたが0.3を掛けたときに整数乗算を行っていることを意味します。 .3の整数部分は0なので、何か* 0 = 0です。コードをに変更します。

dim minusprice as single 
0

あなたはIntegerとしてminusPriceを宣言してきたように、それが画分を含めることはできません。計算は正しく行われますが、その後は整数に変換されます。コード内で何が起こっている

は実際には次のとおりです。

minusPrice = CInt(CDbl(minus) * 0.3) 

あなたの代わりにDoubleまたはDecimalとしてminusPriceを宣言すると、calcuationの結果は変換されません。

タイプDoubleは、正規浮動小数点演算に使用されます。あなたが知っておくべき精度には固有の限界がありますが、これをちょうど価格を表示するために使うのであれば十分です。

タイプDecimalは固定小数点データ型です。つまり、分数を正確に表すことができます。これは、金銭的価値を深刻な形で把握する必要がある場合に使用するものです。