Тип данных Decimal (Visual Basic)

Содержит 128-битовые (16-байтовые) значения со знаком, представляющие 96-битовые (12-байтовые) целые числа, масштабируемые с переменной степенью 10. Коэффициент масштабирования указывает число цифр справа от десятичной запятой; его диапазон составляет от 0 до 28. При масштабе 0 (без дробных разрядов) самое крупное значение равно +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28). С 28 десятичными знаками наибольшее значение равно +/-7,9228162514264337593543950335, а наименьшее ненулевое значение +/-0,0000000000000000000000000001 (+/-1E-28).

Заметки

Тип данных Decimal обеспечивает наибольшее количество значащих цифр числа. Он поддерживает до 29 значащих цифр и может представлять значения, превышающие 7.9228 x 10^28. Это особенно подходит для вычислений, например финансовых, которые требуют большое количество цифр, но не могут допускать ошибки округления.

Значение по умолчанию для типа Decimal равно 0.

Советы по программированию

  • Точность. Decimal не является типом с плавающей запятой. Структура Decimal содержит целое двоичное значение вместе с битом знака и целочисленным коэффициентом масштабирования, который указывает, какая часть значения представляет дробную часть. Таким образом, числа в формате Decimal имеют более точное представление в памяти, чем типы с плавающей запятой (Single и Double).

  • Производительность. Тип данных Decimal является самым медленным из всех числовых типов. Перед выбором типа данных следует сравнить важность точности с производительностью.

  • Расширение. Тип данных Decimal можно расширить до Single или Double. Это означает, что можно преобразовать тип Decimal к любому из этих типов без появления ошибки System.OverflowException.

  • Нули в конце строки. В Visual Basic конечные нули не сохраняются в литерале Decimal. Однако в переменной типа Decimal сохраняются любые конечные нули, полученные в результате вычислений. Это демонстрируется в следующем примере.

    Dim d1, d2, d3, d4 As Decimal
    d1 = 2.375D
    d2 = 1.625D
    d3 = d1 + d2
    d4 = 4.000D
    MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) &
          ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4))
    

    Результат, который отобразится в окне MsgBox в предыдущем примере, будет следующим:

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4

  • Символы типов. При добавлении знака D типа литерала к литералу происходит приведение литерала к типу данных Decimal. При добавлении знака @ типа идентификатора к какому-либо идентификатору происходит приведение идентификатора к типу Decimal.

  • Тип Framework.. В .NET Framework данный тип соответствует структуре System.Decimal.

Диапазон

Может потребоваться использовать символ типа (D) для присвоения большого значения переменной или константе типа Decimal. Это демонстрируется в следующем примере.

Dim bigDec1 As Decimal = 9223372036854775807   ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808   ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D  ' No overflow.

Компилятор интерпретирует литерал как Long, если за ним не следует символ типа литерала. Объявление для bigDec1 не приводит к переполнению, так как его значение находится в пределах диапазона для Long. Однако значение bigDec2 слишком велико для Long, поэтому вызывается ошибка компилятора. Символ типа литерала D решает проблему для bigDec3, поскольку при его использовании литерал интерпретируется компилятором как Decimal.

См. также

Ссылки

Сводка типов данных (Visual Basic)

System.Decimal

Decimal.Decimal

Тип данных Single (Visual Basic)

Тип данных Double (Visual Basic)

Функции преобразования типов (Visual Basic)

Сводка по преобразованию (Visual Basic)

Основные понятия

Эффективное использование типов данных (Visual Basic)