Тип decimal
- это 128-битный тип данных, подходящий для финансовых и денежных расчетов.
decimal
Тип может представлять значения в диапазоне от 1,0 × 10 -28 до приблизительно 7,9 × 10 28 с 28-29 значащими цифрами.
Конечный набор значений типа decimal
имеют вид (–1) с × c × 10 - e , гдезнак s равен 0 или 1, коэффициент c равен 0 ≤ c <2 <sup>96 , а шкала e таково, что 0 ≤ e ≤ 28.
Тип decimal
не поддерживает нули со знаком, бесконечности или числа NaN.decimal
представляется в виде 96-битного целого числа, масштабируемого степенью десяти.Для десятичных чисел с абсолютным значением менее 1,0 м значение является точным с точностью до десятичного знака 28 th , но не дальше.
Для десятичных знаков с абсолютным значением, превышающим или равным 1,0 м, это значение является точным до 28 или 29 цифр.В отличие от типов данных float
и double
десятичные дробные числа, такие как 0,1, могут быть представлены точно в десятичном представлении.В представлениях float
и double
такие числа часто представляют собой бесконечные дроби, что делает эти представления более склонными к ошибкам округления.
Если один из операндов двоичного оператора имеет тип decimal
тогда другой операнд должен иметь целочисленный тип или тип decimal
.Если присутствует операнд целочисленного типа, он преобразуется в decimal
до выполнения операции.
Результатом операции со значениями типа decimal
является результат вычисления точного результата (сохранение масштаба, как определено для каждого оператора), а затем округление в соответствии с представлением.Результаты округляются до ближайшего представимого значения и, когда результат одинаково близок к двум представимым значениям, до значения, имеющего четное число в позиции наименее значащей цифры (это называется «округлением банкира»).Нулевой результат всегда имеет знак 0 и масштаб 0.
Если десятичная арифметическая операция выдает значение, меньшее или равное 5 × 10 -29 в абсолютном значении,результат операции становится равным нулю.Если десятичная арифметическая операция приводит к результату, который слишком велик для формата decimal
, выдается System.OverflowException
.
Тип decimal
имеет большую точность, но меньший диапазон, чем типы с плавающей запятой.Таким образом, преобразования из типов с плавающей точкой в decimal
могут вызвать исключения переполнения, а преобразования из decimal
в типы с плавающей точкой могут привести к потере точности.По этим причинам не существует неявных преобразований между типами с плавающей точкой и decimal
, и без явных приведений невозможно смешивать операнды с плавающей точкой и decimal
в одном выражении.