Ebben az oktatóanyagban példák segítségével megismerhetjük a lebegő és a kettős adattípusokat. Megvizsgáljuk a köztük levő legfontosabb különbségeket és azt is, hogy mikor alkalmazzuk őket.
A C ++, mind float
és double
adattípust használnak lebegőpontos értékek. A tizedes és az exponenciális értékek lebegőpontos számokat használnak . Például,
// 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
Hozzá kell adnunk az utótagot f
vagy F
egy float
érték végét . A fordító ugyanis a tizedes értékeket utótag nélkül értelmezi double
.
Fontolja meg ezt a kódot.
float a = 5.6;
Itt double
értéket rendeltünk egy float
változóhoz.
Ebben az esetben az 5.6- ot float
a fordító automatikusan átkonvertálja, mielőtt hozzárendelik az a változóhoz. Ez adatvesztést okozhat. További információért keresse fel a C ++ típusú konverziót.
Különbség az úszó és a kettős között
úszó | kettős |
---|---|
Méret: 4 bájt | Méret: 8 bájt |
Pontosság: Általában 7 tizedesjegyű pontosság | Pontosság: Általában 15 tizedesjegyű pontosság |
Példa: 3.56f , 3e5f stb | Példa: 3.56 , 3e5 stb |
Megjegyzés: Hacsak nincs konkrét követelménye, mindig használja a double
helyett float
, mert a float
változók hajlamosak hibákat bevezetni, ha nagy számmal dolgoznak.
1. példa: C ++ úszó és dupla
#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; )
Kimenet
Dupla típusszám = 3,91235 Úszó típusú szám = 3,91235
Megjegyzés: A példához használt fordító (MinGW fordító) 6 számjegyet engedélyezett. Tehát, a változó értékeinket lekerekítette és 6 számjegyűre csonkolta a fordító.
setprecision () a tizedespontok megadásához
Adhatjuk meg a tizedes pontot nyomtatni cout
segítségével a setprecision()
funkciót.
Ezt a függvényt a iomanip
fejlécfájl határozza meg , amely a bemeneti / kimeneti manipulációt jelenti .
2. példa: A setprecision () használata lebegőpontos számokhoz
#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; )
Kimenet
Dupla típusszám = 3,912348239293 Úszó típusszám = 3,912348270416
Amint a fenti példából láthatjuk, a pontosságot legfeljebb 13 számjegyből adtuk meg.
cout << setprecision(13);
A változóinkhoz rendelt lebegőpontos érték szintén 13 számjegyből áll.
Azonban, mivel float
egy pontosságát akár csak 7 számjegy, ez azt mutatja, szemét értékek után a pontosság meghaladja.
Változónk double
a helyes számot mutatja, mivel annak 15 jegyű pontossága van, míg maga a szám 13 számjegyből áll.
Alternatív megoldásként megadhatunk különböző pontosságokat a különböző változókhoz nyomtatás közben.
3. példa: Különböző pontosságok a különböző változókhoz
#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; )
Kimenet
Dupla típusszám = 3,9123482393 Úszó típusszám = 3,912348
A fenti programból láthatjuk, hogy két különböző pontossági értéket állítottunk be a float
és számára double
.
Mindkét esetben a pontosság kisebb, mint a szám tényleges számjegyei. Tehát az utolsó számjegyet kerekítik, a többit pedig csonkítják.
Megjegyzés: Ha megadjuk a pontosságot, amely nagyobb, mint maga az adattípus (7 for float
és 15 for double
) pontossága, akkor a fordító szemetet ad nekünk a pontossági határ túllépése után, amint az a 2. példafloat
kimenetén is látható .
Dolgozzon exponenciális számokkal
Mint fent említettük, float
és exponenciális számokdouble
ábrázolására is használható . Például,
// ex = 325 X (10 25) double ex = 325E25;
A C ++ exponenciális számokat és nagyon nagy számokat ad ki tudományos formátumnak nevezett formátumban. Az ex változó alapértelmezés szerint ebben a formátumban jelenik meg, mivel ez nagyon nagy szám.
Annak érdekében, hogy erőt C ++ megjelenítéséhez a lebegőpontos számok a scientific
formátumban, függetlenül a méret a szám, akkor használja a formátumleíró scientific
belsejében cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Ezen felül létezik egy másik formátummeghatározó fixed
, amely a lebegőpontos számokat tizedes formátumban jeleníti meg.
Hasonló a lebegőpontos számok megjelenítéséhez, ha csak a cout
nélkül használjuk setprecision()
, kivéve azt a tényt, amely fixed
legfeljebb 6 tizedesjegyig számokat jelenít meg.
Másrészt csak a cout
kijelölt számjegyek használata az adott fordító szerint (6 teljes számjegy a MinGW fordító esetében , beleértve a tizedesjegy előtti számjegyeket is).
4. példa: Rögzített és tudományos formátumok
#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; )
Kimenet
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;
Megjegyzés: A C ++ által támogatott lebegőpontos adattípusok a következők float
, double
és long double
. Nincs long float
.