Выражение приведения типа VB6

Примерно так

   $('.scoreContainer').find('.score').each(function() {
      var high = $(this).attr('data-high'),
        low = $(this).attr('data-low'),
        score = $(this).attr('data-score');
      var position = ((score - low) / (high - low)) * 100

      $(this).find('.arrow').css('right', position + "%");
      $(this).find('.arrow').html('<span>' + score + '</span>');
    });
    .scoreContainer {
  background: #ff3232;
  background: -moz-linear-gradient(left, #ff3232 0%, #ffff30 50%, #95ef81 100%);
  background: -webkit-linear-gradient(left, #ff3232 0%, #ffff30 50%, #95ef81 100%);
  background: linear-gradient(to right, #ff3232 0%, #ffff30 50%, #95ef81 100%);
  width: 400px;
  height: 20px;
  position: relative;
  margin-bottom: 25px;
  display: flex;
}
.score{
   width: 33.33%;
   height: 100%;
   position: relative;
}

.arrow {
  position: absolute;
  right: calc(100% - 5px);
  top: 100%;
  width: 0;
  height: 0;
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-bottom: 5px solid black;
}

.arrow span {
  font-size: 10px;
  position: absolute;
  left: 50%;
  top: 8px;
  transform: translateX(-50%);
  -webkit-transform: translateX(-50%);
  -moz-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  -o-transform: translateX(-50%);
}
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="scoreContainer">
   <div class="green score" data-high="600" data-low="400" data-score="475">
        <div class="arrow"></div>
    </div>
    <div class="yelow score" data-high="399" data-low="200" data-score="201">
        <div class="arrow"></div>
    </div>
     <div class="red score" data-high="199" data-low="0" data-score="99">
        <div class="arrow"></div>
    </div>
    
 </div>

10
задан adrien 4 May 2012 в 16:32
поделиться

6 ответов

Существуют много они в зависимости от типа, к которому Вы бросаете

cint() Cast to integer
cstr() cast to string
clng() cast to long
cdbl() cast to double
cdate() cast to date

Это также имеет неявный кастинг, таким образом, можно сделать этот myString=myInt

17
ответ дан 3 December 2019 в 13:47
поделиться

Довольно много плакатов, кажется, неправильно читали вопрос, таким образом, я попытаюсь все объяснить путем перефразирования вопроса и суммирования корректных ответов, данных до сих пор.

Проблема

Я хочу бросить данные одного типа к другому типу. В моем коде VB.NET я использовал бы CType сделать это. Однако, когда я пытаюсь использовать CType в VB6 я получаю "Sub или Function не определенная" ошибка. Так, как я могу выполнить броски в VB6 если CType не будет работать?

Решение

Поскольку Вы, возможно, обнаружили, VB6 не имеет a CType функция как VB.NET делает. Однако другие функции преобразования (те, которые имеют начало имен C), с которым Вы, возможно, встретились в коде VB.NET, таком как CInt и CStr, действительно существуйте в VB6, и можно использовать их для преобразования в и от нетипов объектов. Нет никакой встроенной функции для преобразования объекта одного класса к объекту другого класса. Следует иметь в виду, что VB6, в отличие от VB.NET, не поддерживает наследование. Класс в VB6 может реализовать один или несколько интерфейсов, но он не может наследоваться другому классу. Однако, если класс объекта реализует больше чем один интерфейс, можно использовать Set оператор для кастинга объекта к одному из интерфейсов это поддерживает (как предложенный Муравей). Расширенная версия примера кода Муравья обеспечивается ниже:

Пример: Кастинг класса к одному из его поддерживаемых интерфейсов

Dim base As BaseClass
Dim child As ChildClass     'implements BaseClass'

Set child = New ChildClass 
Set base = child            '"Cast" child to BaseClass'


Встроенное преобразование типов функционирует в VB6

Ниже полный список встроенных функций преобразования, доступных в VB6, взятом непосредственно от Справочного файла VB6.


CBool

Возвраты

Boolean

Описание

Преобразуйте выражение в булевскую переменную.

Диапазон для аргумента выражения:

Любая допустимая строка или числовое выражение.


CByte

Возвраты

Byte

Описание

Преобразуйте выражение в Байт.

Диапазон для аргумента выражения:

От 0 до 255.


CCur

Возвраты

Currency

Описание

Преобразуйте выражение в Валюту.

Диапазон для аргумента выражения:

- 922,337,203,685,477.5808 к 922 337 203 685 477,5807.


CDate

Возвраты

Date

Описание

Преобразуйте выражение до настоящего времени.

Диапазон для аргумента выражения:

Любое допустимое выражение даты.


CDbl

Возвраты

Double

Описание

Преобразуйте выражение для Удвоения.

Диапазон для аргумента выражения:

- 1.79769313486232E308 к-4.94065645841247E-324 для отрицательных величин; 4.94065645841247E-324 к 1.79769313486232E308 для положительных значений.


CDec

Возвраты

Decimal

Описание

Преобразуйте выражение в Десятичное число.

Диапазон для аргумента выражения:

+/-79,228,162,514,264,337,593,543,950,335 для масштабируемых нулем чисел, то есть, чисел без десятичных разрядов. Для чисел с 28 десятичными разрядами диапазон +/-7.9228162514264337593543950335. Самое маленькое ненулевое количество 0.0000000000000000000000000001.


CInt

Возвраты

Integer

Описание

Преобразуйте выражение в Long.

Диапазон для аргумента выражения:

- От 32,768 до 32 767; части округлены.


CLng

Возвраты

Long

Описание

Преобразуйте выражение в Long.

Диапазон для аргумента выражения:

- 2,147,483,648 - 2 147 483 647; части округлены.


CSng

Возвраты

Single

Описание

Преобразуйте выражение в Единственный.

Диапазон для аргумента выражения:

- 3.402823E38 к-1.401298E-45 для отрицательных величин; 1.401298E-45 к 3.402823E38 для положительных значений.


CStr

Возвраты

String

Описание

Преобразуйте выражение для Строкового представления.

Диапазон для аргумента выражения:

Возвраты для CStr зависят от аргумента выражения.


CVar

Возвраты

Variant

Описание

Преобразуйте выражение в Вариант.

Диапазон для аргумента выражения:

Тот же диапазон как Дважды для численных данных. Тот же диапазон как Строка для нечисленных данных.

18
ответ дан 3 December 2019 в 13:47
поделиться

Скажем, у Вас есть объект ChildClass (дочерний элемент), который Вы хотите бросить в BaseClass. Вы делаете это:

Dim base As BaseClass
Set base = child

Из-за пути VB6 обрабатывает безопасность типов времени компиляции, можно просто сделать это без любого дополнительного синтаксиса.

Примечание: Учитывая, что все остальные, кажется, упомянули CType, Я, возможно, просто неправильно понял вопрос полностью, и я приношу извинения, если это так!

4
ответ дан 3 December 2019 в 13:47
поделиться

Составы исполнителей уже упомянули, корректны, но если типом является Объект затем, необходимо использовать "Набор" в VB6, таком как:

If IsObject(Value) Then
    Set myObject = Value ' VB6 does not have CType(Value, MyObjectType)
Else
    myObject = Value     ' VB6 does not have CType(Value, MyObjectType)
End If

Это, конечно, зависит от типа, к которому Вы бросаете. Почти все пользовательские классы являются объектами, а также Набором, Словарем и многими другими. Встроенные типы такой как долго, целое число, булевская переменная, и т.д. являются, очевидно, не объектами.

2
ответ дан 3 December 2019 в 13:47
поделиться

Ctype () я верю. C* (CDate (), CStr (), и т.д.) являются пережитками по большей части.

0
ответ дан 3 December 2019 в 13:47
поделиться

Преобразования не являются "бросками" вообще. Например, попробуйте:

MsgBox CLng(CBool(3&))

Результат-1, не 3. Это вызвано тем, что это - функции преобразования, не броски. Язык важен!

0
ответ дан 3 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: