.net отличие - Разница между десятичной, плавающей и двойной в .NET?




8 Answers

float и double - это типы плавающих двоичных точек . Другими словами, они представляют собой число, подобное этому:

10001.10010110011

Двоичный номер и местоположение двоичной точки кодируются в пределах значения.

decimal - тип с плавающей запятой . Другими словами, они представляют собой число, подобное этому:

12345.65789

Опять же, число и местоположение десятичной точки оба закодированы внутри значения - это то, что делает decimal типом еще тип с плавающей точкой вместо типа фиксированной точки.

Важно отметить, что люди используются для представления нецелых чисел в десятичной форме и ожидают точных результатов в десятичных представлениях; не все десятичные числа точно представлены в двоичной с плавающей запятой - 0,1, например, поэтому, если вы используете двоичное значение с плавающей запятой, вы фактически получите приближение к 0,1. Вы также получите приближения при использовании плавающей десятичной точки - результат деления 1 на 3 не может быть точно представлен, например.

Что касается того, что использовать, когда:

  • Для значений, которые являются «естественно точными десятичными знаками», полезно использовать decimal . Это обычно подходит для любых понятий, изобретенных людьми: финансовые показатели являются наиболее очевидным примером, но есть и другие. Рассмотрим, например, оценку дайверам или фигуристам.

  • Для значений, которые являются более артефактами природы, которые в действительности не могут быть точно измерены, float / double более подходят. Например, научные данные обычно представляются в этой форме. Здесь исходные значения не будут «децимально точными» для начала, поэтому для ожидаемых результатов не важно поддерживать «десятичную точность». Плавающие двоичные точечные типы намного быстрее работают, чем десятичные.

из float

В чем разница между decimal , float и double в .NET?

Когда кто-нибудь воспользуется одним из них?




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

  • Определенная потеря точности приемлема во многих научных расчетах из-за практических пределов измеряемой физической проблемы или артефакта. Потеря точности не приемлема в финансах.
  • Десятичное число (намного) медленнее, чем float и double для большинства операций, в первую очередь потому, что операции с плавающей запятой выполняются в двоичном формате, тогда как десятичный материал выполняется в базе 10 (т.е. поплавки и удваиваются обрабатываются оборудованием FPU, например MMX / SSE , тогда как десятичные числа вычисляются в программном обеспечении).
  • Decimal имеет недопустимо меньший диапазон значений, чем двойной, несмотря на то, что он поддерживает больше цифр точности. Поэтому Decimal нельзя использовать для представления многих научных ценностей.



float 7 цифр точности

double имеет около 15 цифр точности

decimal цифра имеет около 28 цифр точности

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

Я нашел это интересным. Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой




Я не буду повторять тонны хорошей (и некорректной) информации, на которую уже ответил ответ в других ответах и ​​комментариях, но я отвечу на ваш следующий вопрос с подсказкой:

Когда кто-нибудь воспользуется одним из них?

Использовать десятичное значение для подсчитанных значений

Используйте float / double для измеренных значений

Некоторые примеры:

  • деньги (мы считаем деньги или измеряем деньги?)

  • расстояние (мы рассчитываем расстояние или измеряем расстояние?)

  • (подсчитываем ли мы оценки или оцениваем баллы?)

Мы всегда считаем деньги и никогда не должны их измерять. Обычно мы измеряем расстояние. Мы часто подсчитываем баллы.

* В некоторых случаях, что я бы назвал номинальным расстоянием , мы можем действительно хотеть «подсчитать» расстояние. Например, возможно, мы имеем дело со знаками страны, которые показывают расстояния до городов, и мы знаем, что эти расстояния никогда не имеют более одной десятичной цифры (xxx.x км).




Целые числа, как уже упоминалось, являются целыми числами. Они не могут хранить точку, например .7, .42 и .007. Если вам нужно хранить числа, которые не являются целыми числами, вам нужен другой тип переменной. Вы можете использовать тип double или float. Вы устанавливаете эти типы переменных точно так же: вместо использования слова int вы вводите double или float . Как это:

float myFloat;
double myDouble;

( float подходит для «плавающей запятой» и просто означает число с точкой что-то в конце.)

Разница между ними - это размер чисел, которые они могут удерживать. Для float вы можете иметь до 7 цифр в своем номере. Для double s вы можете иметь до 16 цифр. Если быть более точным, вот официальный размер:

float:  1.5 × 10^-45  to 3.4 × 10^38  
double: 5.0 × 10^-324 to 1.7 × 10^308

float - 32-разрядное число, а double - 64-разрядное число.

Дважды щелкните по новой кнопке, чтобы получить код. Добавьте в код кнопки следующие три строки:

double myDouble;
myDouble = 0.007;
MessageBox.Show(myDouble.ToString());

Остановите свою программу и вернитесь в окно кодирования. Измените эту строку:

myDouble = 0.007;
myDouble = 12345678.1234567;

Запустите программу и нажмите двойную кнопку. В поле сообщения правильно отображается номер. Добавьте еще один номер в конец, и C # снова округляется вверх или вниз. Мораль - если вы хотите точности, будьте осторожны с округлением!




float ~ ± 1,5 x 10-45 до ± 3,4 × 1038 -------- 7 цифр
двойной ~ ± 5,0 × 10-324 ± 1,7 × 10308 ------ 15 или 16 цифр
десятичная ~ ± 1,0 × 10-28 до ± 7,9 × 1028 -------- 28 или 29 цифр




Типы переменных Decimal, Double и Float отличаются тем, что они сохраняют значения. Точность - основное отличие, когда float представляет собой тип данных с плавающей точкой с одной точностью (32 бит), double - это тип данных с плавающей запятой двойной точности (64 бит), а десятичный - это тип данных с плавающей точкой с 128-битной точкой.

Float - 32 бит (7 цифр)

Двойной - 64 бит (15-16 цифр)

Десятичная - 128 бит (28-29 значащих цифр)

Подробнее о ... разница между десятичным, плавающим и двойным




Простыми словами:

  1. Типы переменных Decimal, Double и Float отличаются тем, что они сохраняют значения.
  2. Точность - основное различие (обратите внимание, что это не единственная разница), где float - это тип данных с плавающей точкой с одной точностью (32 бит), double - это тип данных с плавающей точкой с двойной точностью (64 бит), а десятичный - это 128-битный тип данных с плавающей точкой.
  3. Сводная таблица:

/==========================================================================================
    Type       Bits    Have up to                   Approximate Range 
/==========================================================================================
    float      32      7 digits                     -3.4 × 10 ^ (38)   to +3.4 × 10 ^ (38)
    double     64      15-16 digits                 ±5.0 × 10 ^ (-324) to ±1.7 × 10 ^ (308)
    decimal    128     28-29 significant digits     ±7.9 x 10 ^ (28) or (1 to 10 ^ (28)
/==========================================================================================
Вы можете прочитать больше здесь , Float , Double и Decimal .




Related