2013-03-11 2 views
3

Каков внутренний формат «десятичного» значения в VB или C#?vb/C# десятичный внутренний формат

Я не знаю, что это имеет значение для всего, что я делаю немедленно, но это одна из тех вещей, которые хорошо знать. Например, зная, сколько бит и как отрицательные числа хранятся, может означать, что когда вы видите, что отрицательное число появляется там, где вы ожидали положительного, вы можете сразу подумать: «Ах, было переполнение», а не смущение глубокими темными тайнами ,

+1

http://stackoverflow.com/questions/618535/what-is-the-difference-between-decimal-float-and-double-in-c или еще лучше http://csharpindepth.com/Articles /General/Decimal.aspx –

ответ

7

Ответ на ваш вопрос содержится в полном техницветоме по documentation:

Тип Десятичного значения представляет собой десятичное число в диапазоне от положительного 79,228,162,514,264,337,593,543,950,335 отрицательных 79,228,162,514,264,337,593,543,950,335. Тип десятичного значения - , соответствующий финансовым расчетам, требующим большого количества значимых интегральных и дробных цифр и без ошибок округления. Десятичный тип не устраняет необходимость округления. Скорее, он минимизирует ошибки из-за округления.

десятичное число представляет собой значение с плавающей точкой, который состоит из знака, числовое значение, где каждая цифра в значении в диапазоне от 0 до 9, а также коэффициент масштабирования, который указывает положение плавающей запятой который разделяет интегральную и дробную части числового значения.

Двоичное представление десятичного значения состоит из 1-битного знака, 96-битное целое число, а коэффициент масштабирования используется для разделения 96-разрядного целого числа и определить, какую часть этого является десятичной дробью , Коэффициент масштабирования неявно число 10, увеличен до показателя степени в диапазоне от 0 до 28. Таким образом, двоичное представление десятичное значение имеет вид, ((-2 до 2)/10 (0 до 28)), где -2 -1 равно MinValue, а 2 -1 равно MaxValue. Дополнительные сведения о двоичном представлении десятичных значений и примере см. В конструкторе Decimal(Int32[]) и методе GetBits.

Масштабный коэффициент также сохраняет любые конечные нули в десятичном . Конечные нули не влияют на значение десятичного числа в арифметических или сравнительных операциях. Однако конечные нули могут быть , обнаруженные методом ToString, если применяется соответствующая строка формата .

И двоичное представление, как описано в документации для GetBits:

Двоичное представление десятичного числа состоит из 1-битового знака, 96-битового целого числа А, а коэффициент масштабирования, используемый для разделения целочисленного числа и указать, какая часть его является десятичной дробью. Коэффициент масштабирования неявно равен числу 10, поднятому до показателя в диапазоне от 0 до 28.

Возвращаемое значение представляет собой четырехэлементный массив из 32-разрядных целых чисел.

Первый, второй и третий элементы возвращаемого массива содержат младшие, средние и высокие 32 бита 96-битного целочисленного числа.

Четвертый элемент возвращаемого массива содержит масштабный коэффициент и знак . Он состоит из следующих частей:

Биты от 0 до 15, нижнее слово, не используются и должны быть равны нулю.

Биты с 16 по 23 должны содержать показатель между 0 и 28, который указывает мощность 10 для деления целочисленного числа.

Биты с 24 по 30 не используются и должны быть равны нулю.

Бит 31 содержит знак: 0 означает положительный, а 1 означает отрицательный.

Обратите внимание, что представление бит различает отрицательный и положительный ноль. Эти значения считаются равными во всех операциях .

+0

Спасибо. Я не думал смотреть под System.decimal, я смотрел списки стандартных типов данных, и они говорили о диапазоне, но не в формате. Хорошо, может быть, это должно было быть очевидное место для просмотра, и у меня замерзли мозги. – Jay

1

Оба C# и VB.NET decimal относится к System.Decimal, который хорошо задокументированы: System.Decimal

decimal (C# Reference)

Десятичный ключевое слово обозначает тип данных 128-битный. По сравнению с типами с плавающей точкой десятичный тип имеет большую точность и меньший диапазон , что делает его подходящим для финансовых и денежных расчетов . Примерный диапазон и точность для десятичного разряда показаны в следующей таблице.

Диапазон: ± 1,0 × 10-28 до ± 7,9 × Precision тысячу двадцать-восемь: 28-29 значащих цифр

Decimal Data Type (Visual Basic)

Трюмы подписали 128 бит (16 байт) значения, представляющие 96-битные (12-байтовые) целые числа, масштабируемые переменной мощностью 10. Масштабный коэффициент определяет количество цифр справа от десятичной точки; он находится в диапазоне от 0 до 28. Со шкалой 0 (без знаков после запятой) максимально возможное значение составляет +/- 79,228,162,514,264,337,593,543,950,335 (+/- 7.9228162514264337593543950335E + 28). С 28 знаками после запятой наибольшее значение равно +/- 7.9228162514264337593543950335, а наименьшее значение равно +/- 0,0000000000000000000000000001 (+/- 1E-28).

Смежные вопросы