#excel #vba
#excel #vba
Вопрос:
У меня проблема в том, что если я попытаюсь преобразовать, например, «10.5» в double через CDbl (), оно станет 105 вместо 10.5. Я искал ответ почти полчаса и ничего не могу найти. Я делаю ошибку или это просто способ работы CDbl?
Private Sub btn_Enter_Click()
number2 = CDbl(Output)
Select Case operator
Case " "
Output = number1 number2
Case "-"
Output = number1 - number2
Case "*"
Output = number1 * number2
Case "/"
Output = number1 / number2
End Select
operator = ""
End Sub
number1 = 10
Output (before it gets converted to number2) = "2.5"
operator = "*"
What I should get:
25
What I get:
250
PS: Если вам интересно, почему я не использую Application.Оцените для оператора, мой учитель хочет, чтобы я использовал регистр выбора
Комментарии:
1. Каков результат следующей строки:
MsgBox Application.DecimalSeparator
? Если это запятая (,
), то вам придетсяReplace
поставить точку (.
) с ней, прежде чем выполнятьCDbl
.2. Ваш учитель не очень хорош, если они позволяют вам использовать переменные без их объявления. Пожалуйста, обновите свой код, чтобы показать объявление для вывода, number1 и number2
3. @VBasic2008 спасибо, я должен использовать запятую вместо точки.
4.@freeflow number1 и number2 являются общедоступными переменными
Option Explicit
Public number1 As Double
Public number2 As Double
Вывод — это метка. С помощью Output = «Example» вы меняете заголовок метки.
Ответ №1:
CDbl предполагает наличие локального десятичного разделителя, возможно, запятой в вашем случае.
Используйте значение, когда известно, что десятичная точка является точкой:
number2 = Val(Output)
Комментарии:
1. При локальном десятичном разделителе точки значение Val («2,5») равно 2. Предполагая аналогичное поведение на компьютере операционной системы, это не дает желаемого результата.
2. @BrianMStafford: Прочитайте еще раз, пожалуйста. Задающий вопросы имеет значение для
output
как"10.5"
, а не"10,5"
.3. Страница функции Val в документах Microsoft содержит следующее: «Функция Val распознает только точку ( . ) в качестве допустимого десятичного разделителя. Когда используются разные десятичные разделители, как в международных приложениях, вместо этого используйте CDbl для преобразования строки в число.»
4. Спасибо, мне действительно пришлось использовать запятую. Странно, потому что, когда я впервые протестировал это, я получил ошибку.