VirQ. Таблица дробных типов в C#
Язык C# входит в ТОП-5
самых популярных языков
программирования
Главная / Дробные переменные /
Таблица дробных типов
Статей на сайте: 61

Таблица дробных типов


C# поддерживает 3 дробных типа значений. Различаются они по скорости обработки операций и своей вместимости (допустимый диапазон).
Приведём таблицу этих типов:


Тип Размер в ОЗУ Диапазон Epsilon Префикс Точность
double 8 байт от -1,79769308 до 1,79769308 4,94066-324 d 14
float 4 байта от -3,4028238 до 3,4028238 1,4013-45 f 6
decimal 16 байт от -7,922828 до 7,922828 - m 28
Для каждого числа, написанного с префиксом "d" или без него, это число типа double. Префикс "d" не обязателен.
[code] double x = 3.2; double w = 6.7d; [/code]
Для остальных типов ставить его обязательно:
[code] float a = 10.7f; decimal q = -5.038m; [/code]
Если забыть поставить букву f или m, то происходит несоответствие типов:
[code] float a = 10.7; //double невозможно напрямую присвоить к float decimal q = -5.038; //double невозможно напрямую присвоить к decimal [/code]
Второй вариант, если не префиксы, тогда приведение типов
[code] float a = (float)10.7; decimal q = (decimal)-5.038m; [/code]
Префиксы можно применить только к числам [code] decimal x = 1.5m; //Префикс m применяется к числу double z = 6.5; decimal q = zm; //Тут ошибка! Применение префикса m к переменной недопустимо decimal q = (decimal)m; //Верно тут. Использовать приведение типов [/code]

Epsilon в таблице - это число наименьшее число, приближённое к 0, которое можно использовать. И как положительное и как отрицательное.

Разница между ними - в точности. Количество значащих цифр. Лучше всего показать на примере:
[code] decimal a1 = 1.5m; a1 -= 0.0000000000000000000000000002m; Console.WriteLine(a1); Console.WriteLine(""); double a2 = 1.5; a2 -= 0.0000000000000000000000000002d; Console.WriteLine(a2); Console.WriteLine(""); float a3 = 1.5f; a3 -= 0.0000000000000000000000000002f; Console.WriteLine(a3); Console.WriteLine(""); Console.ReadKey(); [/code]
Результат:
Console
×
1.4999999999999999999999999998

1.5

1.5

Ниже будет предоставлен пример уровня точности, который не сложно подобрать экспериментально:
[code] decimal a1 = 1.5m; a1 -= 0.0000000000000000000000000002m; //28 значащих цифры Console.WriteLine(a1); Console.WriteLine(""); double a2 = 1.5; a2 -= 0.00000000000002d; //14 значащих цифр Console.WriteLine(a2); Console.WriteLine(""); float a3 = 1.5f; a3 -= 0.000002f; //6 значащих цифр Console.WriteLine(a3); Console.WriteLine(""); Console.ReadKey(); [/code]
Console
×
1.4999999999999999999999999998
1.49999999999998
1.499998

В первой таблице это как раз и указано в последнем столбике.

Дополнительная информация о том, как вывести результат в консоли или WinForm