Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Содержит 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