Математический расчет в VB - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь выполнить простое умножение в 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».

Ответы [ 4 ]

7 голосов
/ 27 января 2012

Вы объявили minusPrice как целое число, поэтому оно округляет ваш результат.

Тебе нужно ...

Dim minusPrice As Decimal
Dim totalPrice As Decimal

или Double ... или float, в зависимости от ваших потребностей. Цены обычно десятичные.

--- Редактировать ---

Только что заметил, что пропустил жизненно важную часть:

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

Если значение 0,3 также не выражено в десятичном виде, вы можете получить небольшие ошибки округления.

3 голосов
/ 27 января 2012

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 голосов
/ 27 января 2012

Поскольку вы объявили minusPrice как Integer, он не может содержать дроби. Расчет выполнен правильно, но затем он преобразуется в целое число.

То, что происходит в коде, на самом деле:

minusPrice = CInt(CDbl(minus) * 0.3)

Если вы объявите minusPrice как Double или Decimal, результат вычисления не будет преобразован.

Тип Double используется для обычных операций с плавающей запятой. Вам необходимо знать о точности, но если вы используете это только для отображения цены, этого достаточно.

Тип Decimal - это тип данных с фиксированной запятой, что означает, что он может точно представлять дробные значения. Это то, что вы должны использовать, если вам нужно серьезно отследить денежную стоимость.

0 голосов
/ 27 января 2012
dim minusprice as integer 

это означает, что когда вы умножаете на .3, вы делаете целочисленное умножение. Целая часть .3 равна 0, поэтому что-то * 0 = 0. Измените код на.

dim minusprice as single
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...