Тип данных 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 к любому из этих типов без появления ошибки 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 данный тип соответствует структуре Decimal.

Диапазон

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

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

Объявление bigDec1 не возникает переполнение, поскольку значение, присвоено к нему попадают в диапазон для Long. Значение Long можно присвоить переменной Decimal.

Объявление bigDec2 формирует ошибку переполнения, поскольку значение, присвоено к ней слишком велико для Long. Поскольку числовой литерал не может быть интерпретировано как Long сначала он не может быть присвоен переменной Decimal.

Для bigDec3, символ типа литерала D решает проблему путем реализации компилятора интерпретировать как Decimal литерал, а не как Long.

См. также

Ссылки

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

Decimal

Decimal.#ctor

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

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

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

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

Math.Round

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

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