Не удается преобразовать строку с точкой в double

#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. Спасибо, мне действительно пришлось использовать запятую. Странно, потому что, когда я впервые протестировал это, я получил ошибку.