В този урок ще научим за плаващите и двойните типове данни с помощта на примери. Ще разгледаме и някои от основните разлики между тях и кога да ги използваме.
В 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 ++ преобразуване на типове.
Разлика между плувка и двойка
плувка | двойно |
---|---|
Размер: 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
.