Примерно так
$('.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>
Существуют много они в зависимости от типа, к которому Вы бросаете
cint() Cast to integer
cstr() cast to string
clng() cast to long
cdbl() cast to double
cdate() cast to date
Это также имеет неявный кастинг, таким образом, можно сделать этот myString=myInt
Довольно много плакатов, кажется, неправильно читали вопрос, таким образом, я попытаюсь все объяснить путем перефразирования вопроса и суммирования корректных ответов, данных до сих пор.
Я хочу бросить данные одного типа к другому типу. В моем коде 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.
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
Описание
Преобразуйте выражение в Вариант.
Диапазон для аргумента выражения:
Тот же диапазон как Дважды для численных данных. Тот же диапазон как Строка для нечисленных данных.
Скажем, у Вас есть объект ChildClass (дочерний элемент), который Вы хотите бросить в BaseClass. Вы делаете это:
Dim base As BaseClass
Set base = child
Из-за пути VB6 обрабатывает безопасность типов времени компиляции, можно просто сделать это без любого дополнительного синтаксиса.
Примечание: Учитывая, что все остальные, кажется, упомянули CType
, Я, возможно, просто неправильно понял вопрос полностью, и я приношу извинения, если это так!
Составы исполнителей уже упомянули, корректны, но если типом является Объект затем, необходимо использовать "Набор" в 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
Это, конечно, зависит от типа, к которому Вы бросаете. Почти все пользовательские классы являются объектами, а также Набором, Словарем и многими другими. Встроенные типы такой как долго, целое число, булевская переменная, и т.д. являются, очевидно, не объектами.
Ctype () я верю. C* (CDate (), CStr (), и т.д.) являются пережитками по большей части.
Преобразования не являются "бросками" вообще. Например, попробуйте:
MsgBox CLng(CBool(3&))
Результат-1, не 3. Это вызвано тем, что это - функции преобразования, не броски. Язык важен!