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

Содержит 128-разрядные (16-байтные) значения со знаком, представляющие 96-разрядные (12-байтные) целые числа с переменной степенью, кратной 10.Holds signed 128-bit (16-byte) values representing 96-bit (12-byte) integer numbers scaled by a variable power of 10. Коэффициент масштабирования определяет количество цифр справа от десятичной запятой. Он находится в диапазоне от 0 до 28.The scaling factor specifies the number of digits to the right of the decimal point; it ranges from 0 through 28. С масштабом 0 (без десятичных знаков) максимально возможное значение — +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E + 28).With a scale of 0 (no decimal places), the largest possible value is +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28). С 28 десятичными разрядами максимальное значение — +/-7.9228162514264337593543950335, а наименьшее ненулевое значение — +/-0,0000000000000000000000000001 (+/-1E-28).With 28 decimal places, the largest value is +/-7.9228162514264337593543950335, and the smallest nonzero value is +/-0.0000000000000000000000000001 (+/-1E-28).

КомментарииRemarks

DecimalТип данных предоставляет наибольшее количество значащих цифр для числа.The Decimal data type provides the greatest number of significant digits for a number. Он поддерживает до 29 значащих цифр и может представлять значения, превышающие 7,9228 x 10 ^ 28.It supports up to 29 significant digits and can represent values in excess of 7.9228 x 10^28. Он особенно подходит для вычислений, например финансовых, которые нуждаются в большом количестве цифр, но не могут допускать ошибки округления.It is particularly suitable for calculations, such as financial, that require a large number of digits but cannot tolerate rounding errors.

Значение по умолчанию для типа Decimal — 0.The default value of Decimal is 0.

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

  • Обеспечивают.Precision. Decimalне является типом данных с плавающей запятой.Decimal is not a floating-point data type. DecimalСтруктура содержит двоичное целочисленное значение, а также бит знака и целочисленный коэффициент масштабирования, указывающий, какая часть значения является десятичной дробью.The Decimal structure holds a binary integer value, together with a sign bit and an integer scaling factor that specifies what portion of the value is a decimal fraction. По этой причине Decimal числа имеют более точное представление в памяти, чем типы с плавающей запятой ( Single и Double ).Because of this, Decimal numbers have a more precise representation in memory than floating-point types (Single and Double).

  • Производительность.Performance. DecimalТип данных является самым медленным из всех числовых типов.The Decimal data type is the slowest of all the numeric types. Перед выбором типа данных следует оценить важность точности в соответствии с производительностью.You should weigh the importance of precision against performance before choosing a data type.

  • Расширяющие.Widening. DecimalТип данных расширяется до Single или Double .The Decimal data type widens to Single or Double. Это означает, что можно преобразовать Decimal в любой из этих типов без возникновения System.OverflowException ошибки.This means you can convert Decimal to either of these types without encountering a System.OverflowException error.

  • Нули в конце.Trailing Zeros. Visual Basic не сохраняет конечные нули в Decimal литерале.Visual Basic does not store trailing zeros in a Decimal literal. Однако Decimal переменная сохраняет все конечные нули, полученные при вычислении.However, a Decimal variable preserves any trailing zeros acquired computationally. Это показано в следующем примере.The following example illustrates this.

    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 в предыдущем примере имеют следующий вид:The output of MsgBox in the preceding example is as follows:

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
    
  • Символы типа.Type Characters. При добавлении к литералу символа типа литерала D производится принудительное приведение литерала к типу данных Decimal.Appending the literal type character D to a literal forces it to the Decimal data type. При добавлении символа идентификатора типа @ к любому идентификатору производится принудительное приведение этого идентификатора к типу Decimal.Appending the identifier type character @ to any identifier forces it to Decimal.

  • Тип Framework.Framework Type. В .NET Framework данный тип соответствует структуре System.Decimal.The corresponding type in the .NET Framework is the System.Decimal structure.

ДиапазонRange

Может потребоваться использовать D символ типа, чтобы присвоить большое значение Decimal переменной или константе.You might need to use the D type character to assign a large value to a Decimal variable or constant. Это требование обусловлено тем, что компилятор интерпретирует литерал как Long , если символ типа литерала не соответствует литералу, как показано в следующем примере.This requirement is because the compiler interprets a literal as Long unless a literal type character follows the literal, as the following example shows.

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

Объявление для bigDec1 не создает переполнение, так как присваиваемое ему значение попадает в диапазон для Long .The declaration for bigDec1 doesn't produce an overflow because the value that's assigned to it falls within the range for Long. LongЗначение может быть присвоено Decimal переменной.The Long value can be assigned to the Decimal variable.

Объявление для bigDec2 создает ошибку переполнения, так как присвоенное ей значение слишком велико для Long .The declaration for bigDec2 generates an overflow error because the value that's assigned to it is too large for Long. Поскольку числовой литерал не может быть интерпретирован как Long , он не может быть назначен Decimal переменной.Because the numeric literal can't first be interpreted as a Long, it can't be assigned to the Decimal variable.

Для bigDec3 символ типа литерала D решает проблему, вызывая компилятору интерпретировать литерал как, Decimal а не как Long .For bigDec3, the literal type character D solves the problem by forcing the compiler to interpret the literal as a Decimal instead of as a Long.

См. также разделSee also