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

Содержит 128-разрядные (16-байтовые) значения, представляющие 96-разрядные (12-байтовые) целые числа, масштабируемые переменной мощностью 10. Коэффициент масштабирования указывает число цифр справа от десятичной точки; диапазон от 0 до 28. С масштабом 0 (без десятичных разрядов), максимально возможное значение — +/-79 228 162 514 264 337 593,5543,950,335 (+/-7.922816251426433759354395033950335E+28). При 28 десятичных разрядах наибольшее значение равно +/-7.92816251426437593554395035, а наименьшее ненулевое значение — +/-0.000000000000000000000000000000000001 (+/-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.

  • Тип платформы. В .NET Framework данный тип соответствует структуре System.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

См. также