I denne vejledning lærer vi om float- og dobbeltdatatyperne ved hjælp af eksempler. Vi vil også se på nogle af de vigtigste forskelle mellem dem og hvornår de skal bruges.
I C ++ bruges både float
og double
datatyper til værdier med flydende punkt. Flydende tal bruges til decimal- og eksponentielle værdier. For eksempel,
// 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
Vi skal tilføje suffikset f
eller F
i slutningen af en float
værdi. Dette skyldes, at kompilatoren fortolker decimalværdier uden suffikset som double
.
Overvej denne kode.
float a = 5.6;
Her har vi tildelt en double
værdi til en float
variabel.
I dette tilfælde konverteres 5.6float
automatisk til af compileren, før den tildeles variablen a. Dette kan resultere i tab af data. For at lære mere, besøg C ++ Type konvertering.
Forskellen mellem flyde og dobbelt
flyde | dobbelt |
---|---|
Størrelse: 4 bytes | Størrelse: 8 byte |
Præcision: Generelt præcision med 7 decimaler | Præcision: Generelt 15 cifre præcision |
Eksempel: 3.56f , 3e5f etc. | Eksempel: 3.56 , 3e5 etc. |
Bemærk: Medmindre du har et specifikt krav, skal du altid bruge i double
stedet for float
, da float
variabler kan være tilbøjelige til at introducere fejl, når du arbejder med store tal.
Eksempel 1: C ++ flyde og fordoble
#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; )
Produktion
Dobbelt type nummer = 3.91235 Flydetype nummer = 3.91235
Bemærk: Compileren, der er brugt til dette eksempel (MinGW compiler) tilladt for 6 cifre. Så vores variable værdier blev afrundet og afkortet til 6 cifre af compileren.
setprecision () for at specificere decimalpoint
Vi kan specificere antallet af decimaler, der skal udskrives i, cout
ved hjælp af setprecision()
funktionen.
Denne funktion er defineret i iomanip
headerfilen, som står for input / output manipulation .
Eksempel 2: Brug af setprecision () til flydepunktsnumre
#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; )
Produktion
Dobbelt type nummer = 3.912348239293 Flydetype nummer = 3.912348270416
Som vi kan se fra eksemplet ovenfor, har vi specificeret præcisionen op til 13 cifre.
cout << setprecision(13);
Den flydende punktværdi, vi har tildelt vores variabler, består også af 13 cifre.
Da den dog float
har en præcision på op til kun 7 cifre, viser den skraldværdier, når dens præcision er overskredet.
Vores double
variabel viser det korrekte tal, fordi det har en præcision på 15 cifre, mens selve tallet består af 13 cifre.
Som et alternativ kan vi specificere forskellige præcisioner for forskellige variabler, mens vi udskriver dem.
Eksempel 3: Forskellige præcisioner til forskellige variabler
#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; )
Produktion
Dobbelt type nummer = 3.9123482393 Flydetype nummer = 3.912348
Fra ovenstående program kan vi se, at vi har indstillet to forskellige præcisionsværdier for float
og double
.
I begge tilfælde er præcisionen mindre end de faktiske cifre i nummeret. Så det sidste ciffer afrundes, og resten afkortes.
Bemærk: Hvis vi specificerer præcisionen, der er større end selve datatypens præcision (7 for float
og 15 for double
), giver compileren os skraldværdier, efter at præcisionsgrænsen er overskredet, som det kan ses med float
output i eksempel 2 .
Arbejd med eksponentielle numre
Som nævnt ovenfor float
og double
kan også bruges til at repræsentere eksponentielle tal . For eksempel,
// ex = 325 X (10 25) double ex = 325E25;
C ++ udsender eksponentielle tal og meget store tal i et format kaldet det videnskabelige format. Variablen ex udsendes som standard i dette format, da det er et meget stort tal.
For at tvinge C ++ til at vise vores flydende numre i scientific
formatet uanset størrelsen på nummeret bruger vi formatspecifikatoren scientific
inde i cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Derudover er der et andet format specificeret kendt som fixed
, der viser flydende numre i decimalformat.
Det svarer til at vise flydende numre ved kun at bruge cout
uden setprecision()
, bortset fra det faktum, at der fixed
vises tal op til 6 decimaler.
På den anden side viser kun brug af cout
cifre i henhold til den specifikke compiler (6 samlede cifre i tilfælde af MinGW-compiler , inklusive cifrene før decimaltegnet).
Eksempel 4: Faste og videnskabelige formater
#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; )
Produktion
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;
Bemærk: De floating-point datatyper understøttes af C ++ er float
, double
og long double
. Der er ingen long float
.