В этом руководстве мы узнаем о типах данных float и double с помощью примеров. Мы также рассмотрим некоторые ключевые различия между ними и когда их использовать.
В C ++, так float
и double
типы данных используются для значений с плавающей точкой. Числа с плавающей запятой используются для десятичных и экспоненциальных значений. Например,
// creating float type variables float num1 = 3.0f; float num2 = 3.5f; float num3 = 3E-5f; // 3x10^-5 // creating double type variables double num4 = 3.0; double num5 = 3.5; double num6 = 3E-5; // 3x10^-5
Мы должны добавить суффикс f
или F
в конце float
значения. Это связано с тем, что компилятор интерпретирует десятичные значения без суффикса как double
.
Рассмотрим этот код.
float a = 5.6;
Здесь мы присвоили double
значение float
переменной.
В этом случае 5.6 преобразуется float
компилятором автоматически перед присвоением переменной a. Это может привести к потере данных. Чтобы узнать больше, посетите Преобразование типов C ++.
Разница между float и double
плавать | двойной |
---|---|
Размер: 4 байта | Размер: 8 байт |
Точность: как правило, точность до 7 десятичных знаков. | Точность: как правило, точность до 15 десятичных знаков. |
Пример: 3.56f и 3e5f т. Д. | Пример: 3.56 и 3e5 т. Д. |
Примечание. Если у вас нет особых требований, всегда используйте double
вместо float
, поскольку float
переменные могут приводить к ошибкам при работе с большими числами.
Пример 1: C ++ float и double
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )
Вывод
Число двойного типа = 3,91235 Число типа с плавающей запятой = 3,91235
Примечание: компилятор, используемый для этого примера (компилятор MinGW), допускает использование 6 цифр. Итак, наши значения переменных были округлены и усечены компилятором до 6 цифр.
setprecision () для указания десятичных точек
Мы можем указать количество десятичных знаков для печати cout
с помощью setprecision()
функции.
Эта функция определена в iomanip
файле заголовка, который обозначает манипуляции с вводом / выводом .
Пример 2: Использование setprecision () для чисел с плавающей запятой
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting the precision to 12 decimal places cout << setprecision(13); // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )
Вывод
Число двойного типа = 3,912348239293 Число типа с плавающей запятой = 3,912348270416
Как видно из приведенного выше примера, мы указали точность до 13 цифр.
cout << setprecision(13);
Значение с плавающей запятой, которое мы присвоили нашим переменным, также состоит из 13 цифр.
Однако, поскольку float
точность составляет всего 7 цифр, он показывает значения мусора после превышения его точности.
Наша double
переменная показывает правильное число, потому что оно имеет точность 15 цифр, а само число состоит из 13 цифр.
В качестве альтернативы мы можем указать различную точность для разных переменных при их печати.
Пример 3: Различная точность для разных переменных
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting precision to 11 for double cout << "Double Type Number = " << setprecision(11) << a << endl; // Setting precision to 7 for float cout << "Float Type Number = " << setprecision(7) << b << endl; return 0; )
Вывод
Число двойного типа = 3,9123482393 Число типа с плавающей запятой = 3,912348
Из приведенной выше программы мы видим, что мы установили два разных значения точности для float
и double
.
В обоих случаях точность меньше реальных цифр числа. Таким образом, последняя цифра округляется, а остальная часть усекается.
Примечание: если мы укажем точность больше, чем точность самого типа данных (7 для float
и 15 для double
), то компилятор выдаст нам значения мусора после того, как предел точности будет превышен, как можно увидеть в float
выводе в примере 2 .
Работа с экспоненциальными числами
Как уже упоминались выше, float
и double
также может быть использован для представления экспоненциальных чисел . Например,
// ex = 325 X (10 25) double ex = 325E25;
C ++ выводит экспоненциальные числа и очень большие числа в формате, называемом научным форматом. Переменная ex будет выводиться в этом формате по умолчанию, так как это очень большое число.
Чтобы заставить C ++ отображать наши числа с плавающей запятой в scientific
формате независимо от размера числа, мы используем спецификатор формата scientific
внутри cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
В дополнение к этому существует еще один описатель формата, известный как fixed
, который отображает числа с плавающей запятой в десятичном формате.
Это похоже на отображение чисел с плавающей запятой только с использованием cout
без setprecision()
, за исключением того факта, что fixed
отображаются числа до 6 десятичных знаков.
С другой стороны, только использование cout
отображает цифры в соответствии с конкретным компилятором (всего 6 цифр в случае компилятора MinGW , включая цифры перед десятичной точкой).
Пример 4: фиксированный и научный форматы
#include #include using namespace std; int main() ( // Creating a decimal double type variable double a = 3.912348239293; // Creating an exponential double type variable double ex1 = 325e+2; // Creating a float type variable float b = 3.912348239293f; // Creating an exponential float type variable float ex2 = 325e+2f; // Displaying output with fixed cout << "Displaying Output With fixed:" << endl; cout << "Double Type Number 1 = " << fixed << a << endl; cout << "Double Type Number 2 = " << fixed << ex1 << endl; cout << "Float Type Number 1 = " << fixed << b << endl; cout << "Float Type Number 2 = " << fixed << ex2 << endl; // Displaying output with scientific cout << "Displaying Output With scientific:" << endl; cout << "Double Type Number 1 = " << scientific << a << endl; cout << "Double Type Number 2 = " << scientific << ex1 << endl; cout << "Float Type Number 1 = " << scientific << b << endl; cout << "Float Type Number 2 = " << scientific << ex2 << endl; return 0; )
Вывод
Displaying Output With fixed: Double Type Number 1 = 3.912348 Double Type Number 2 = 32500.000000 Float Type Number 1 = 3.912348 Float Type Number 2 = 32500.000000 Displaying Output With scientific: Double Type Number 1 = 3.912348e+000 Double Type Number 2 = 3.250000e+004 Float Type Number 1 = 3.912348e+000 Float Type Number 2 = 3.250000e+004
long double
Apart from float
and double
, there is another data type that can store floating-point numbers. This is known as long double
.
It usually occupies a space of 12 bytes (depends on the computer system in use), and its precision is at least the same as double
, though most of the time, it is greater than that of double
.
long double
values should end with L
. For example,
// declaring a long double variable long double num_ldb = 2.569L;
Примечание. C ++ поддерживает типы данных с плавающей запятой float
, double
и long double
. Нет long float
.