K3JAE Ответов: 2

Умножение двух чисел, а затем добавление еще одного приводит к "0" в качестве ответа


Я пытаюсь умножить 2 числа вместе, а затем добавить третье число к этому результату.
s1 ниже-десятичное число до 4 знаков после запятой.
t1 ниже-десятичное число (деньги)
t7 ниже десятичное число до 3 знаков после запятой

Преобразование переменных в числа, например, мой расчет должен выглядеть следующим образом:

(100.012 * 0.1700) + $168.62 следует суммировать и тем самым сделать tbTrkGalsPurch1: $185.62

Очевидно, я нарушаю правило, с которым не знаком. Я не получаю никаких сообщений об ошибках ни в Debug, ни в EXE-файле программы. Я не получаю никаких сообщений об ошибках в своем предложении TRY.

Private Sub calc()
    Dim a, s1, t1, t7 As Decimal

    s1 = CDec(IIf(tbStateTax1.Text.Trim = "", 0D, tbStateTax1.Text.Trim))
    t1 = CDec(IIf(tbPumpCost1.Text.Trim = "", 0D, tbPumpCost1.Text.Trim))
    t7 = CDec(IIf(tbTrkGalsPurch1.Text.Trim = "", 0D, tbTrkGalsPurch1.Text.Trim))

    Try
        If t7 > 0 AndAlso cbTermPurch1.Text.ToString = "No" Then
            a = (t7 * s1) + t1
            tbTrkFuelPurch1.Text = a.ToString("C2")
        Else
            tbTrkFuelPurch1.Text = t1.ToString("C2")
        End If
    Catch ex As Exception
        'If a calculation error occurs, show Error message box
        Dim frm As New MeMsgCalcError(ex, "'Fuel plus Tax Stop 1' Calculation Error." & vbCrLf & "Lines 479-490")
        frm.Show()
    End Try
End Sub

Во время отладки все мои значения (t7, s1, t1) показывают правильные значения при наведении курсора мыши на переменную, но значение " a " равно 0, что наводит меня на мысль, что что-то не так либо в форматировании, либо в том, как я пытаюсь выполнить вычисление. Я подозреваю, что проблема в форматировании.

Что я уже пробовал:

Я попытался заключить в скобки все уравнение: a = ((t7 * s1) + t1)
Я попытался сделать расчет умножения без сложения: a = (t7 * s1)
Я попытался удалить: AndAlso cbTermPurch1. Text.ToString = " нет " часть уравнения.
Я попытался изменить форматирование там, где в настоящее время у меня есть:
s1 = CDec(IIf(tbStateTax1. Text.Отделка = "", 0d, в tbStateTax1.Текст.Отделка))
Я перешел на:
s1 = CDec(IIf(tbStateTax1. Text.Отделка = "", 4Д, tbStateTax1.Текст.Отделка))

[no name]

"tbTrkGalsPurch1: $185,62" - - - - " tbTrkFuelPurch1.Text = a. ToString("C2")"
то, что вы говорите, что хотите, и то, что вы на самом деле делаете, - это две разные вещи. Я запустил ваш код, используя ваши номера, и получил a = $ 185,62, как и ожидалось.

K3JAE

Хорошо, тогда что или где я должен искать, чтобы найти свою проблему, если расчет формулы верен? Какие-нибудь намеки?

Ralf Meier

Посмотрите на мое решение ...

2 Ответов

Рейтинг:
1

Ralf Meier

Если бы я предложил следующее Для преобразования строк :

s1 = Val(tbStateTax1.Text.Trim)
t1 = Val(tbPumpCost1.Text.Trim)
t7 = Val(tbTrkGalsPurch1.Text.Trim)

Я думаю, что ваш расчет теперь будет верным ...


K3JAE

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

Я дал только фрагмент информации, так как это делается 6 раз, так что есть несколько переменных - то есть tbTrkGalsPurch1, tbTrkGalsPurch2 ... tbTrkGalsPurch6 - tbPumpCost1, tbPumpCost2 ... tbPumpCost6 и так далее.

У меня есть живой скриншот для вас, чтобы посмотреть на него, и, возможно, это определит мою проблему... У меня есть он в отладке с переменными, показывающими, что расчет работает. Каждый показывает конечный результат в размере $ 0.00. Если вам интересно, пожалуйста, смотрите http://www.k3jae.com/ScreenShots/ScreenShot-Fuel.gif и, надеюсь, это еще больше укрепит мою проблему. Это основано на реальных данных, и там, где вы видите r1 и r2, показывающие "0"), на самом деле есть сумма в долларах, но она не читается должным образом.

Ralf Meier

Я посмотрел на ваш скриншот, но не понял результатов.
Попробуйте объявить "a, s1, t1, t7" как double вместо Decimal ...

Рейтинг:
0

Patrice T

Извините, но мне трудно думать, что вы знаете отладчик так, как утверждаете. Ваша неспособность решить эту проблему противоречит знаниям отладчика.
Попробуйте эти изменения с помощью отладчика и посмотрите, что пойдет не так.

s1 = 0.1700
t1 = 168.62
t7 = 100.012
a = (t7 * s1) + t1

a = 123.45
tbTrkFuelPurch1.Text = a.ToString("C2")

если выход равен 0, то это проблема форматирования.
если a получите вычисление, это преобразование из Строковой задачи.

Невероятно, что вы не сделали эти яички самостоятельно, чтобы увидеть, в чем проблема.

[Обновление]
Слово "отладка" составляет 2 раза на ваш вопрос. Если вы не скажете, что не владеете отладчиком, все будут ожидать, что вы это сделаете.
Мой совет: изучите отладчик как можно скорее.
- установите точку останова в начале вашей рутины.
- откройте окно локальные переменные.
- выполнение шаг за шагом вы программируете и видите, какая строка выполняется, и видите, как эволюционируют переменные.

В первой части моего кода я заставляю допустимые значения в переменных и вычисляю a. Не должно быть сложно увидеть, если a останется 0 или нет.
Это вторая часть, которую я установил a с допустимым значением не должно быть сложно увидеть, нормально ли форматирование или нет.
если вы являетесь автором этого кода, Вы должны быть в состоянии изменить его, чтобы сделать тесты.


K3JAE

Я никогда не утверждал, что знаю отладку-я просто давал значения, с которыми программа в режиме отладки работала. Я пробовал все вышесказанное, но мои навыки кодирования не так уж велики.

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

Мой вопрос был бы... где может быть ошибка форматирования? Я уже использовал ваш метод раньше. Я попытался объявить значения "двойными", как предложил кто-то другой, но безуспешно.

Я предполагаю, что первоначальная причина, по которой я задал этот вопрос, заключалась не в том, чтобы меня били по голове за мою некомпетентность или невежество, а в том, чтобы дальше учиться и понимать, где и на что смотреть в связи с моей проблемой. Я действительно пытался решить эту проблему до публикации, чтобы избежать напоминания о том, насколько я некомпетентен в кодировании, но так как я не мог решить ее после 24+ часов, я рискнул и спросил.


К вашему сведению-я действительно решил свою проблему, и это не имело ничего общего с формулой или форматированием того же самого. Проблема была в том, что у меня есть combobox по умолчанию "нет" в loadform, который проверяет формула. Он смотрит, чтобы увидеть, если это "нет", но, очевидно, установив его по умолчанию в loadform, не видит значения No. Я уверен, что не объясняю это должным образом, но достаточно сказать, что я действительно решил свою проблему расчета самостоятельно, которая на самом деле никогда не была проблемой калькуляции.

Ralf Meier

ОК... читая ваш ответ, Я согласен с вами, что это больше не проблема форматирования или преобразования.
Так... вопрос должен быть: почему он терпит неудачу ?..
В этом случае мой вопрос был бы :
В какое время вы вызываете свой Calc-метод ? Хорошей идеей может быть следующее: Вы вызываете его с каждым событием изменения (всех) задействованных элементов управления. Это должно быть: 4 текстовых поля, а также ComboBox.
На вашем скриншоте я увидел, что ваш код очень длиннее. Так что, возможно, здесь задействовано гораздо больше средств контроля.

дополнительное разъяснение :
Когда вы предоставляете такой код и спрашиваете, почему расчет идет неудачно, каждый может предположить, что вызов самого кода является правильным.
Чтобы помочь в решении проблемы иностранному человеку, необходимо получить хорошую информацию и хорошую обратную связь, если ответ будет дан (или, как часто говорит OriginalGriff : "мы не сидим перед вашим компьютером и не можем читать ваши мысли ..."
Возможно, вы новичок в VB и .Net, а также на этот форум - но это не оправдание, если вы не поможете нам помочь вам ...!
Может быть, вы подумаете об этом ...

Ralf Meier

Что-то еще :
Нет причин обижаться.
Может быть, вы не поняли, что пытался объяснить пполиморф, но вы должны понять, что сначала он пытался вам помочь ...