Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Содержит 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без возникновения ошибки System.OverflowException. Однако это преобразование может привести к потере точности, так какSingleиDoubleпринимаются во внимание большие значения, а не сохранение точности.
Dim decimalValue As Decimal = 1234567890123456789012345D
Dim doubleValue As Double = CDbl(decimalValue)
Console.WriteLine("Decimal value: " & decimalValue)
Console.WriteLine("Double value: " & doubleValue)
Выходные данные предыдущего примера показывают, что десятичное значение сохраняет полную точность, а двойное значение теряет точность из-за ограничений типа данных Double.
Decimal value: 1234567890123456789012345
Double value: 1.23456789012346E+24
Конечные нули. 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