V tomto návode sa pomocou príkladov dozvieme o floatových a dvojitých údajových typoch. Pozrime sa tiež na niektoré kľúčové rozdiely medzi nimi a na to, kedy ich použiť.
V C ++ sa pre hodnoty s pohyblivou rádovou čiarkou používajú oba typy float
a double
dátové typy. Čísla s pohyblivou rádovou čiarkou sa používajú pre desatinné a exponenciálne hodnoty. Napríklad,
// 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
Musíme pridať príponu f
alebo F
na koniec float
hodnoty. Je to preto, že kompilátor interpretuje desatinné hodnoty bez prípony ako double
.
Zvážte tento kód.
float a = 5.6;
Tu sme premennej priradili double
hodnotu float
.
V takom prípade je kompilátor automaticky prevedený na 5,6float
predtým, ako je priradený k premennej a. Môže to mať za následok stratu údajov. Ak sa chcete dozvedieť viac, navštívte Prevod typu C ++.
Rozdiel medzi float a double
plavák | dvojitý |
---|---|
Veľkosť: 4 bajty | Veľkosť: 8 bajtov |
Presnosť: Všeobecne platí presnosť na 7 desatinných miest | Presnosť: Všeobecne platí presnosť na 15 desatinných miest |
Príklad: 3.56f , 3e5f atď. | Príklad: 3.56 , 3e5 atď. |
Poznámka: Ak nemáte konkrétnu požiadavku, vždy používajte double
namiesto float
, pretože float
premenné môžu byť náchylné na chyby pri práci s veľkým počtom.
Príklad 1: C ++ float a 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; )
Výkon
Dvojité číslo typu = 3,91235 Číslo typu plaváka = 3,91235
Poznámka: Kompilátor použitý v tomto príklade (kompilátor MinGW) má povolených 6 číslic. Takže naše hodnoty premenných boli kompilátorom zaokrúhlené a skrátené na 6 číslic.
setprecision () na zadanie desatinných miest
cout
Pomocou setprecision()
funkcie môžeme určiť počet desatinných miest na vytlačenie .
Táto funkcia je definovaná v iomanip
hlavičkovom súbore, ktorý označuje manipuláciu so vstupom / výstupom .
Príklad 2: Použitie setprecision () pre čísla s pohyblivou rádovou čiarkou
#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; )
Výkon
Double Type Number = 3.912348239293 Float Type Number = 3.912348270416
Ako vidíme z vyššie uvedeného príkladu, špecifikovali sme presnosť až na 13 číslic.
cout << setprecision(13);
Hodnota s pohyblivou rádovou čiarkou, ktorú sme priradili našim premenným, sa tiež skladá z 13 číslic.
Pretože float
má však presnosť až 7 číslic, po prekročení presnosti zobrazuje hodnoty smetí .
Naša double
premenná zobrazuje správne číslo, pretože má presnosť 15 číslic, zatiaľ čo samotné číslo pozostáva z 13 číslic.
Ako alternatívu môžeme určiť rôzne presnosti pre rôzne premenné pri ich tlači.
Príklad 3: Rôzne presnosti pre rôzne premenné
#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; )
Výkon
Dvojité číslo typu = 3,9123482393 Číslo typu plaváka = 3,912348
Z vyššie uvedeného programu vidíme, že sme nastavili dve rôzne hodnoty presnosti pre float
a double
.
V obidvoch prípadoch je presnosť menšia ako skutočné číslice čísla. Posledná číslica sa teda zaokrúhli a zvyšok sa skráti.
Poznámka: Ak zadáme presnosť väčšiu ako presnosť samotného dátového typu (7 pre float
a 15 pre double
), potom nám kompilátor po prekročení limitu presnosti poskytne hodnoty smetí, ako je to vidieť na float
výstupe v príklade 2. .
Práca s exponenciálnymi číslami
Ako bolo uvedené vyššie, float
a double
môžu byť tiež použité na reprezentáciu mocniny . Napríklad,
// ex = 325 X (10 25) double ex = 325E25;
C ++ vydáva exponenciálne čísla a veľmi veľké čísla vo formáte, ktorý sa nazýva vedecký formát. Premenná ex sa v tomto formáte predvolene zobrazí, pretože ide o veľmi veľké číslo.
Aby sme nútili C ++ zobrazovať naše čísla s pohyblivou rádovou čiarkou vo scientific
formáte bez ohľadu na veľkosť čísla, použijeme scientific
vo vnútri špecifikátor formátu cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Okrem toho je k dispozícii ďalší špecifikátor formátu fixed
, ktorý zobrazuje čísla s pohyblivou rádovou čiarkou v desatinnom formáte.
Je to podobné ako pri zobrazovaní čísel s pohyblivou rádovou čiarkou iba pri použití cout
bez setprecision()
, okrem skutočnosti, že sa fixed
zobrazujú čísla až do 6 desatinných miest.
Na druhej strane iba pomocou cout
zobrazenia číslic podľa konkrétneho kompilátora (6 celkových číslic v prípade kompilátora MinGW , vrátane číslic pred desatinnou čiarkou).
Príklad 4: Fixné a vedecké formáty
#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; )
Výkon
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;
Poznámka: V s plávajúcou desatinnou čiarkou dátové typy podporované C ++, sú float
, double
a long double
. Neexistuje žiadna long float
.